c++ /CLI正确使用线程和附录文本的问题



我会尽量简短。对于一个学校项目,我需要一个带有命令提示符(文本框)和日志窗口(richtextbox)的UI。

当我们输入一个命令时,System::Void MyForm::cmd_textBox_KeyDown(System::Object^ sender, KeyEventArgs^ e)调用另一个函数(在另一个。cpp中)来处理它,并且该函数显示在我的richtextbox中。

一些函数发送usb帧并通过中断函数接收响应:System::Void MyForm::serialPort1_DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e)

我关心的是:

  • 我的命令应该在另一个线程中启动,而不是由UI管理的线程?
  • 当我们收到一个USB帧,我想在我的richtextbox中做一个AppendText, Appentext有时会有很多延迟(有时在其他命令之后)。

目前我通过这个函数更新我的日志,但它仍然有延迟。如果我用Invoke代替BeginInvoke, UI会冻结。

void MyForm::Update_log_TextBox(String^ text, Color text_color)
{
Update_log_TextBox_Delegate^ action = gcnew Update_log_TextBox_Delegate(this, &MyForm::Worker);
this->BeginInvoke(action, text, text_color);
}
void MyForm::Worker(String^ text, Color text_color)
{
MyForm::log_TextBox->SelectionColor = text_color;
MyForm::log_TextBox->AppendText(text);
}

请问你有什么解决办法吗?对不起,我的英语不好,这不是我的母语

Application::DoEvents();

解决我的问题。强制UI应用更改

最新更新