シリアルポートからデータを受信したいとしましょう。serial.ReadLine() のブロック呼び出しを使用し、次のイベントを使用します。
private void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
var port = (SerialPort)sender;
string line = port.ReadLine();
// PROCESS DATA Somewhere else
}
私はさまざまな情報源から読んでいましたが、serial.ReadLine には独自のスレッドがあり、BeginInvoke を使用しない限り、このスレッドから UI を変更すべきではないと言っています。ただし、しばらくすると UI が応答しなくなることに気付きました。
だからここに私の質問があります。port_DataReceived 内で新しいスレッドを呼び出すのは悪い考えでしょうか? データを受信し、受信したデータを別のスレッドで処理したいのですが、 mythread.Start() どこに置くのですか? データを受信した後、いつ独立して実行するかをどうにかして知りたいだけです。また、MSDN によると、中止されたスレッドを再び開始することはできません。Thread.Sleep を配置すると、UI がフリーズします。