我定义了一个串行端口(C#/.Net),然后为接收到数据分配了一个SerialDataReceivedEventHandler。
myPort.DataReceived += new SerialDataReceivedEventHandler (myEventHandler);
但是,每当收到数据时,我需要做很多事情,包括:
- 将数据保存到我的 SQL 数据库。
- 在 UI 上更新 RichTextBox
- 发回响应串行消息
我应该从myEventHandler中运行所有这些函数吗?这是正确的做法吗?问题是,例如,当我尝试从myEventHandler更改RichTextBox时,我收到一条错误消息,指出我正在执行跨线程操作。
更新:
private void myEventHandler (object sender, SerialDataReceivedEventArgs e)
{
Action myAction = () => rtbMyRichTextBox.Text = InputMessageString;
if (rtbMyRichTextBox.InvokeRequired)
rtbMyRichTextBox.Invoke(myAction);
else
myAction();
StoreToSqlDatabase ();
SerialWriteResponseMessage ();
}