【发布时间】:2013-07-06 02:48:06
【问题描述】:
今天我遇到了一些奇怪的行为。我有一个使用SerialPort 类访问的串行设备。主应用程序有一些计时器,每秒轮询一次设备以获取某些状态更新。在某些时候,我需要做一些耗时的工作,因此不要阻止我使用Backgroundworker 的 GUI。后台工作者需要一次访问相同的串行设备。有时访问工作有时不工作。经典的mutli-thread 场景。所以我尝试在将新命令发送到串行设备的函数上使用互斥锁。
对于串行设备,我将所有内容放在它自己的类中。在这个类中,我有一个sendCommand() 函数,它将命令写入设备并使用AutoResetEvent 和OnDataReceived 事件来等待答案。函数 sendCommand 会阻塞,直到收到答案或发生超时。然后,我在输入 sendCommand 时添加了 Mutex,在所有可能的退出时添加了 releaseMutex。还是不行。
有没有更好的方法来处理这个问题?
谢谢, 托比亚斯
【问题讨论】:
-
释放互斥量?使用 C#?只需将整个函数包装在 lock() 语句中?
-
您看到错误消息还是应用程序锁定等待互斥锁释放?
-
您的设备不支持双工通道?
-
你能贴一些代码吗?特别是您要同步的部分?
-
前提很棘手。最好通过推而不是拉来完成。运行收到响应时处理响应的代码。
标签: c# multithreading thread-safety serial-port