2012-01-11 5 views
0

1 ~ 1/10Hz의 주파수로 주기적으로 모니터링하려는 장치에 직렬 연결이 있습니다 (아직 결정되지 않음).비동기 직렬 통신 스레드 옵션

나는 통신을 비 블로킹 (non-blocking)으로하고 싶다. 그래서 나는 어떤 종류의 스레드에 통신을두기로 결정했고, 메인 애플리케이션이 스레드로부터 발생 된 이벤트를 통해 데이터를 수신하도록 결정했다.

데이터를 지속적으로주고받는 응용 프로그램 시작시 스레드를 만드는 방법을 생각하고있었습니다. 스레드는 장치로 전송할 명령을 포함하는 대기열을 비운 다음 응답이 완료되면 응답을 수신하는 응답을 수신합니다. 대기열에 명령이 없으면 스레드가 대기 상태가되고 명령이 대기열에 들어갈 때 대기 상태가됩니다.

이 방법이 좋은 방법일까요? BackgroundWorker 나 Task와 같은 프레임 워크의 일부 기능을 사용하는 것에 대해 생각하고있었습니다. 이러한 작업은 내가하는 일에 비해 장점이 있기 때문입니다. 아마도이 작업을 수행하는 다른 방법이 있을까요?

답변

1

스레드와 같이 값 비싼 리소스를 태우는 것을 정당화 할만큼 빈번하지 않습니다. 대신 System.Timers.Timer 또는 System.Threading.Timer (더 나은)를 사용하십시오. 콜백에 장치 쿼리 명령을 작성하십시오. SerialPort.DataReceived 이벤트를 사용하여 응답을 수신하고 이벤트를 발생시킵니다. 이제 모든 것이 값싼 스레드 풀 스레드에서 실행됩니다.

+0

감사합니다. 가장 굉장한! – kasperhj