확인. 2 COM 포트를 모니터링하는 프로그램이 있습니다. 하나는 저울에 연결되고 다른 하나는 모드 버스 보드에 연결됩니다.C# BackgroundWorker 및 Com 포트 문제
내 문제는 Modbus 보드에 연결된 COM 포트에 있습니다. 내 프로그램은 100MS마다 센서 (모듈 버스 보드에 있음)를 읽습니다. 센서가 차단되었는지 여부를 확인하기 위해 COM 포트를 통해 0 또는 1을 반환합니다. 차단 된 경우 신호가 포트를 통해 보드로 전송됩니다.
내 문제는 센서를 모니터링 할 수 없지만 다른 신호를 보내기 전에 com 포트가 사용 중이 아닌지 확인해야한다는 것입니다.
센서를 모니터링하는 루틴은 backgroundworker 스레드에 있습니다. 센서가 트립되면 다른 스레드가 생성되어 Modbus 보드에 신호를 보냅니다. 그래서 보드에 신호를 보내는 동안 "센서 스레드"를 일시 중지해야합니다. 이 일을 어떻게 하죠?
ThreadWork는 BackgroundWorker이므로 Thread.Join은 옵션이 아닙니다.
private void SensorThread_DoWork(object sender, DoWorkEventArgs e)
{
if (SensorThread.CancellationPending == true)
e.Cancel = true;
else
{
ReadSensor();
}
}
이 스레드에 대한 RunWorkerCompleted 그냥 스레드를 다시 시작합니다 :
여기 내 코드입니다. 모든 전송에 대한 책임을 단일 스레드를 만들고 그것을 루프
이와 같은 작업을 위해 'BackgroundWorker'는 선택할 수있는 최악의 솔루션이라고 생각합니다. 'x' 초마다 모니터링 할 필요가있는 것이 있다면'while' 루프와'Thread.Sleep (x);를 가진 전통적인'Thread'가 훨씬 더 적합합니다 ... –