c# - 阻塞的线程可以触发事件吗?

标签 c# multithreading events 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();
}

非常感谢

最佳答案

来自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/

相关文章:

用户控件中的事件

java - 处理 Java 按键事件

c++ - 有没有人尝试过 C++ 的事务内存?

c# - 将图像保存为位图而不会降低质量

c# - 获取RFC返回的嵌套结构的值?

c# - 在 C# 中替换流中的字符串(不覆盖原始文件)

c# - WPF多线程进度对话框

java - java中String变量的并发访问

c# - 事件不会对额外的鼠标按钮使用react

c# - 如何重置 Visual Studio 2017 中的默认设置存储路径?