1

シリアルポートからデータを受信したいとしましょう。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 がフリーズします。

4

1 に答える 1