我会尽量简短。对于一个学校项目,我需要一个带有命令提示符(文本框)和日志窗口(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应用更改