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)
非常感谢你
来自MSDN SerialPort.DataReceived的评论
从SerialPort对象接收数据时,在辅助线程上引发DataReceived事件
因此,我认为您的代码示例不会陷入僵局。
但是,标题中您的问题的答案:
阻塞的线程会引发事件吗?
没有。