我有一个托管的 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);
}
}
}