Как передать структуру потоку фонового работника в C ++ / CLI - PullRequest
1 голос
/ 28 марта 2011
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::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 Ответ

1 голос
/ 28 марта 2011

Похоже, вам нужно объявить вашу структуру как управляемую структуру , используя ключевое слово ref

ref struct ArgumentList {
        int x;
        string text1;
};

Таким образом, она будет правильно наследоваться отТип объекта (базовый объект для всех классов managd), который RunWorkerAsync (Object) ожидает

...