我注意到 AutoResetEvent 在 WaitOne() 调用中间时(有时)完全冻结了消息循环,甚至有效地阻止了信号消息。
IE:
- (UI) 新线程产生
- (UI) 代码调用 WaitOne(); 超时:10s
- (T2) 线程打开设备,调用 Set()
- (UI) WaitOne 阻塞消息循环
- (UI) WaitOne 超时,代码继续执行
- (UI) 主窗口接收信号并继续(但 WaitOne 失败)
有任何想法吗?
编辑:添加 UI/T2 来指定线程。另外,我正在尝试将第 3 方库变为同步。打开设备涉及一个 Open() 调用,该调用反过来会产生一个 OpenOK 或 OpenFailed 事件,我正在尝试进行一个 bool Open() 调用,该调用根据产生的事件返回真/假。