シリアル通信を制御するスレッドを生成するプログラムがあります。シリアルポートでの応答を待つ間、私はAutoResetEventでスレッドをブロックします。ブロックされたスレッドがイベントを発動できますか?
ブロックされているためにデータを受信したときに、そのスレッドはイベントを実行できませんか?
この点を説明するために、以下に私のコードの簡単なバージョンがあります。このコードによってデッドロックが発生するか、ブロックされたスレッドでイベントが実行される可能性がありますか?
AutoResetEvent rxDataReady = new AutoResetEvent(false);
public void GetSomeDataFromSerialPort()
{
SerialPort sp = new SerialPort()
sp.Write(dataRequest)
rxDataReady.WaitOne();
// Process data
}
private void ReadDataEventHandler(object sender, SerialDataReceivedEventArgs e)
{
// Prepare data
rxDataReady.Set();
}
は
@Diryboyの回答は、SerialPort.Dataに関してよりよくなります。具体的には、私がより一般的な答えを示しています。 – eitamal