阻塞的线程会引发事件吗?

fol*_*rem 1 c# events multithreading autoresetevent

我有一个程序可以生成控制串行通信的线程。在等待串行端口响应的同时,我使用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();
}
Run Code Online (Sandbox Code Playgroud)

非常感谢你

Dir*_*boy 5

来自MSDN SerialPort.DataReceived的评论

从SerialPort对象接收数据时,在辅助线程上引发DataReceived事件

因此,我认为您的代码示例不会陷入僵局。

但是,标题中您的问题的答案:

阻塞的线程会引发事件吗?

没有。