모노(Mono) 프레임워크 환경에서 사용하는 SerialPort 클래스는 DataReceived 이벤트를 지원하지 않습니다.
데이터 수신을 위해 자동 알림 방식 대신, 프로그램이 직접 수신 버퍼를 주기적으로 확인하는 폴링(Polling) 방식을 사용해야 합니다.
serialPort.BytesToRead > 0 인지 수시로 체크합니다.Thread.Sleep(10) 정도의 대기 시간을 포함하십시오.// 예시 코드 (C#) Thread receiveThread = new Thread(() => { while (serialPort.IsOpen) { if (serialPort.BytesToRead > 0) { // 데이터 읽기 처리 string data = serialPort.ReadExisting(); Console.WriteLine("Received: " + data); } Thread.Sleep(10); // CPU 부하 방지용 (필수) } }); receiveThread.Start();
클라이언트와 서버간의 단순 통신 예제입니다. C#을 사용해서 짠 소스입니다.
Server.exe 는 PC에서 실행시키고, Client.exe 는 ComfilePi에서 실행시키세요. 물론 PC와 ComfilePi는 RS232C로 연결되어 있어야 합니다. ComfilePi에서 date 또는 time 을 타이핑하면, PC측 (server)에서 응답을 합니다.
| |