struct ArgumentList {
int x;
string text1;
};
/////////////////////////////////////////
ArgumentList arg1={12,"text123"}
WorkerThread->RunWorkerAsync(arg1);
Я хочу передать arg1, но компилятор говорит: «Ошибка C2664: 'void System::ComponentModel::BackgroundWorker::RunWorkerAsync(System::Object ^)': невозможно преобразовать параметр 1 из 'ArgumentList' в 'System::Object ^' "
System::Void backgroundWorker2_DoWork(System::Object^ sender, System::ComponentModel::DoWorkEventArgs^ e) {
//Do stuff with e->Argument
ArgumentList passedarg=(ArgumentList)e->argument; //'type cast' : cannot convert from 'System::Object ^' to 'ArgumentList'
int y=passedarg.x
string text2=passedarg.text1
//...
}
1
Carl
28 Мар 2011 в 11:00
1 ответ
Похоже, вам нужно объявить свою структуру как управляемую структуру с помощью ключевое слово ссылка
ref struct ArgumentList {
int x;
string text1;
};
Таким образом, он будет корректно унаследован от типа объекта (базовый объект для всех управляемых классов), который RunWorkerAsync(Object) ожидает
1
Stephen Bailey
29 Мар 2011 в 14:23
1
Это не то, что большинство программистов .NET считают "управляемой структурой". Это будет «структура значений» или «класс значений». Однако в этом случае ссылочный тип, вероятно, лучше.
– Ben Voigt
29 Мар 2011 в 07:57
Похожие вопросы
Новые вопросы
c++-cli
C ++ / CLI основан на C ++, модифицированном, чтобы позволить компиляцию смеси собственного кода и кода для инфраструктуры общего языка Microsoft (CLI). Он заменяет Microsoft Managed Extensions для C ++, который нацелен на более сильное соответствие C ++.
std::string
? Вам придется пройти через некоторые препятствия, чтобы хорошо играть сBackgroundWorker
, вместо этого рассмотрите возможность использованияSystem::String^
.