2012-08-02 2 views
-1

1 개의 직렬 포트에서 데이터를 읽어야하는 몇 가지 UserControl 프로그램이 있습니다. 내가 가지고있는 몇 가지 프로그램이 포함됩니다 :SerialPort 및 UserControl

  • 대기 속도, 수중 음파 탐지기, 위도, 경도 값 & 등을 텍스트 상자에 표시 값
  • 개체 회피 디스플레이
  • 의 GPS지도

난에 버튼이 주 양식, 그리고 그것을 클릭하면 직렬 포트를 열고 usercontrol 데이터를 읽고 표시해야하지만 어떻게 해야할지 모르겠다.

아무도 내 다른 usercontrol 1 직렬 포트에서 데이터를 읽을 수 있습니다 어떻게 알 수 있습니까? 또는 아마 내가 읽을 수있는 일부 웹 사이트 링크. 고맙습니다!

답변

1

하나의 소스 (직렬 포트)와 많은 사용자 (사용자 컨트롤)가있는 경우. 그런 다음 간접 지정의 다른 계층을 추가해야합니다. 직렬 포트 클래스의 소유자 인 클래스를 작성하고이 클래스의 모든 데이터를 일종의 버퍼로 읽어들입니다 (DataReceived 이벤트에 반응하여 List, Queue 등에 새 데이터 넣기). 이 버퍼는이 클래스에서 홍보하게 될뿐만 아니라 자체 이벤트 (DataReceived?)가 있습니다. 이제 모든 고객은이 이벤트를 청취하고 버퍼를 조사하여 원하는 데이터를 찾을 수 있습니다.

주요 문제는 공유 버퍼에서 데이터를 제거하는 것입니다. 원인은 전체 버퍼 또는 일부만 필요하면 소비자에 달려 있기 때문입니다. 각 소비자가 버퍼에서 작동하는 지점을 프로듀서에게 알려주고 프로듀서가 버퍼의 시작 부분을 벗어나 이동 한 경우 버퍼를 잘라낼 수있는 개념을 생각해보십시오. 그러나 색인이 변경되었음을 소비자에게 다시 알려야한다는 사실을 기억하십시오.

모든 소비자가 일부 데이터를 수신 할 때마다 자체 로컬 버퍼를 생성하고 모든 소비자가 필요에 따라 자체 버퍼를 줄일 수있는 경우 증가하는 공유 버퍼의 문제를 방지 할 수도 있습니다.

전체 응용 프로그램의 메모리 사용 공간을 줄이기 위해 첫 번째 접근 방법의 복잡성이 필요한 경우 상황에 따라 어떤 전략이 더 적합합니까?