好的。我有一个监控 2 个 COM 端口的程序。一个挂在秤上,另一个挂在 modbus 板上。
我的问题出在连接到 modbus 板的 COM 端口上。我的程序每 100 毫秒读取一个传感器(在 modbus 板上)。它返回 0 或 1(通过 COM 端口)以确定传感器是否被阻塞。如果它被阻塞,则会通过端口向电路板发送信号。
我的问题是我无法退出对传感器的监控,但在发送我的其他信号之前,我必须确保没有使用 com 端口。
监控传感器的例程在后台工作线程上。一旦传感器被触发,就会产生另一个线程,向 modbus 板发送信号。所以我需要在向电路板发送信号时暂停“传感器线程”。我该怎么做呢?
请记住,它是一个 BackgroundWorker,因此 Thread.Join 不是一个选项。
这是我的代码:
private void SensorThread_DoWork(object sender, DoWorkEventArgs e)
{
if (SensorThread.CancellationPending == true)
e.Cancel = true;
else
{
ReadSensor();
}
}
该线程的 RunWorkerCompleted 只是重新启动线程。以下线程不断监视“sensorstatus”以查看传感器何时被阻塞:
public void ScaleThread_DoWork(object sender, DoWorkEventArgs e)
{
if (ScaleThread.CancellationPending == true)
{
e.Cancel = true;
}
else
{
//sensor is blocked
if (sensorstatus == 0)
{
ReadScale();
prevgate = gate;
gate = DetermineGate();
//SaveData();
SetOpenDelay();
SetDuration();
//no gate was selected, meat out of range, runs off end
if (gate == 0)
{
txtStatus.Invoke(new UpdateStatusCallback(UpdateStatus), new object[] { meatweight.ToString() +
"lbs is out of range"});
}
else
{
//this triggers a thread to send a signal to the modbus board
gateTimer.Start();
}
}
}
}
RunWorkerCompleted 为此重新启动此线程,使其成为循环