在命令调用之间等待串口响应
本文关键字:串口 响应 等待 之间 命令 调用 | 更新日期: 2023-09-27 18:09:44
我正在使用RS-232(串行)通信的静电计。它一次接受一个命令,并返回一个指示命令是否成功完成的响应。
为了演示,只考虑以下方法…
private void SetDevice()
{
sc.SetBias();
sc.SetRange();
sc.SetCollectionTime();
sc.SetID();
}
sc.SetID()
的方法签名如下:
public void SetID()
{
ComPort.Write("*IDN?");
}
上面的可以让您了解其他单独的命令调用是什么样的。
由于DataReceived事件表明它是在辅助线程上引发的,我应该如何继续等待每个命令调用之间的响应?目前,在sc.SetBias()
被调用之后,sc.SetRange()
会触发,而不管前面的命令是否成功执行。
我可以欣赏,通过启动DataReceivedEvent
在一个新的线程,它可以防止我的UI锁定,但在这种情况下,当它是关键的响应得到配对适当的命令调用,我不确定最好的可用选项,并将感谢一些指导在我的研究。到目前为止,我正在考虑获得当前UI线程的句柄并使用Thread.Sleep(sleepTime)
,但不知道静电计的响应时间到底有多可靠,这真的是最佳实践吗?难道每次命令发出后都不需要调用它吗?
如果您需要的是:
- 发送命令
- 等待响应
- 发送下一个命令
那么你可以使用信号量
工作方式如下:
Semaphore _sync = new Semaphore(1, 1);
SerialPort _port;
...
void Send(...){
_sync.WaitOne()
_port.Send(...);
}
void _port_DataReceived(...){
_sync.Release();
}
试试!