今天我遇到一些奇怪的行为。我有一个串行设备,我使用SerialPort
类访问。主应用程序有一些定时器每秒轮询一次设备的状态更新。在某个时候,我需要做一些耗时的工作,因此不要阻止我使用Backgroundworker
的GUI。后台工作者需要一次访问相同的串行设备。有时访问有时不起作用。经典mutli-thread
方案。所以我尝试在发送新命令到串口设备的函数上使用Mutex。C#多线程和串口通讯
对于串口设备,我把所有东西放在它自己的类中。在这个类中,我有一个sendCommand()
函数,它将命令写入设备,并使用AutoResetEvent
和OnDataReceived
事件来等待答案。 sendCommand函数阻塞,直到接收到答案或发生超时。然后,我在所有可能的出口处输入sendCommand和releaseMutex
时添加了Mutex
。仍然不起作用。
有没有更好的方法来处理这个问题?
感谢, 托比亚斯
releaseMutex?使用C#?只需将整个函数包装在一个lock()语句中? –
您是否看到错误消息或应用程序是否锁定,等待互斥锁释放? –
您的设备不支持双工通道? – Suhan