我有一个程序生成一个控制串行通信的线程。当它等待串行端口上的响应时,我用 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();
}
非常感谢
最佳答案
来自MSDN的评论SerialPort.DataReceived
The DataReceived event is raised on a secondary thread when data is received from the SerialPort object
所以我认为您的代码示例不会以死锁告终。
但是,您在标题中的问题的答案:
Can a blocked thread fire events?
没有。
关于c# - 阻塞的线程可以触发事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41116699/