マネージC++アプリケーションがあり、新しいスレッドを開始していくつかの処理を実行し、いくつかのテキストボックスを更新します。このアプリケーションはループし、すべてのループの最後でスリープします。スリープ状態のため、UIがクラッシュしないように、新しいスレッドに配置する必要がありました。次に、UIを作成したスレッドを呼び出してテキストボックスにアクセスする必要があることに気付きましたが、メインスレッドに戻ったため、スリープ状態でクラッシュしました。これにどのようにアプローチすればよいですか。
private: System::Void buttonStartCamera_Click(System::Object^ sender, System::EventArgs^ e)
{
ThreadStart^ threadStart = gcnew ThreadStart(this, &UserInterface::SetText);
Thread^ newThread = gcnew Thread(threadStart);
newThread->Start();
}
void SetText()
{
if (this->textBoxCameraOneX->InvokeRequired)
{
MyDel^ del = gcnew MyDel(this, &UserInterface::SetText);
this->Invoke(del);
}
else
{
int count = 0;
srand (time(NULL));
for (count = 0; count < 20; ++count)
{
for each (Camera^ camera in cameraList)
{
textBoxCameraOneX->Text = count.ToString();
}
Sleep(300);
}
}
}