Ну, у меня есть этот код в моем управляемом C++/Cli в Visual Studio 2008, я хочу иметь доступ к элементам форм Windows внутри обратного вызова функции потока, и я не могу, он генерирует ошибку. Есть ли другой способ сделать это? чтобы иметь возможность изменять материал GUI внутри метода класса WinForms с помощью обратного вызова функции Thread?
Этот пример показывает, что я хочу сделать.
Мне нужно использовать поток, потому что я хочу, чтобы другие вещи в формах были доступны, и без использования потоков все просто зависает, пока все не будет сделано, и функция «Вход», которую она вызывает, занимает некоторое время, потому что она выполняет HTTP-запросы . и после этого HTTP-запроса я установил значения, которые я получил от него, в элементе формы.
void Login(){
this->btn_next->Enabled = false;
this->login_accounts_facebook->Enabled = false; //This gives an error probably because of accessing "this->"
if(this->clb_contas->CheckedItems->Count <= 0){
//...
}
}
System::Void test_login_Click(System::Object^ sender, System::EventArgs^ e) {
ThreadStart^ start = gcnew ThreadStart(this, &Login_Test::Login);
Thread^ t = gcnew Thread(start);
t->Start();
}
Кто-нибудь знает, как я мог это сделать? если вы считаете, что это невозможно сделать, и вы хотите предложить что-то, чтобы сделать графический интерфейс доступным во время выполнения процесса, я открыт для предложений.
Надеюсь, я был достаточно ясен. Заранее спасибо.
BackgroundWorker
— это путь. Это хорошая оболочка вокруг голого потока, созданная именно для таких сценариев. Основная идея остается: вы не должны (и в большинстве случаев не можете) касаться пользовательского интерфейса из потока, отличного от пользовательского интерфейса. См. здесь пример того, как используй это. - person irobot   schedule 01.04.2012