我正在开发一个与串口相关的应用程序。在使用DataReceived
事件时,SerialPort
我需要使用接收到的字节更新文本框:
private void Connection_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
ledReceive.On = true;
var data = Connection.ReadExisting();
_readBuffer.Add(data);
Invoke(new EventHandler(AddReceivedPacketToTextBox));
}
所以我Invoke
用来更新文本框。但是有一个大问题。当我尝试关闭连接时,我的 UI 被冻结,我认为这是Invoke
因为可能正在做某事。
一位朋友说我应该使用RequiredInvoke
,但我不知道他到底是什么。如何在不弄乱调用和 UI 线程的情况下关闭连接?
这是我的关闭方法:
private void DisconnectFromSerialPort()
{
if (Connection != null && Connection.IsOpen)
{
Connection.Close();
_receivedPackets = 0; //reset received packet count
}
}