私はシリアルポート関連のアプリケーションに取り組んでいます。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
}
}