MSDN 문서에서 DataReceived 이벤트가 반드시 바이트 당 한 번 발생하지 않는다는 것을 알고 있습니다..NET SerialPort 클래스 DataReceived 이벤트가 실행되는 이유는 무엇입니까?
하지만 누가 이벤트를 발생시키는 메커니즘이 정확히 무엇인지 압니까?
각 바이트를 수신하면 이벤트가 시작되기 전에 바이트 사이에 10ms에 도달해야하는 타이머가 다시 시작됩니까?
직렬 포트에서 들어오는 XML 데이터를 읽는 앱을 작성하려고하기 때문에 질문합니다.
내 노트북에는 직렬 포트가 없으므로 가상 직렬 포트 에뮬레이터를 사용합니다. (나는 알고있다, 나는 알고있다 - 나는 ATM에 관해서는 아무것도 할 수 없다).
에뮬레이트 된 포트를 통해 데이터를 응용 프로그램에 전달할 때 각 XML 레코드 (약 1500 바이트)마다 이벤트가 한 번 발생합니다. 완전한. 그러나 다른 사무실의 동료가 실제 케이블로 연결된 두 대의 컴퓨터를 사용하여 시도 할 때 DataReceived 이벤트는 10 바이트 정도의 XML이 끝날 때마다 반복적으로 발생합니다. 이는 앱에서 완전히 벗어납니다.
예, 일반적으로 직렬 포트 데이터는 효율적으로 버퍼링되므로 업데이트가 거의 예측할 수 없습니다. Mark가 설명한 것과 비슷하게 ReadExisting을 반복적으로 호출하고 데이터의 모든 메시지를 처리하며 완료된 메시지를 저장하는 타이머를 설정했습니다. GPS 장치로이 작업을 수행 할 때 메시지에 체크 합계가 포함되어 있으므로 무결성 및 완전성을 검증하여 잘리지 않았는지 확인할 수 있습니다 (이 경우 다음 ReadExisting에서 나머지 메시지를 가져옵니다). 나는 이것을 래퍼 (wrapper)에서 사용했고, 차례로 각 완전한 메시지에 대한 이벤트를 발생시켰다. – AaronLS