Differences
This shows you the differences between two versions of the page.
| Previous revision | |||
| — | comfilepi:monoserialport:index [2026/02/20 15:34] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== 모노에서 시리얼 포트 제어하기 ====== | ||
| + | ==== 주의 사항: 모노(Mono) 프레임워크 제약 ==== | ||
| + | 모노(Mono) 프레임워크 환경에서 사용하는 '' | ||
| + | |||
| + | * **현상:** 데이터가 수신되어도 이벤트 핸들러가 자동으로 호출되지 않음. | ||
| + | * **이유:** 리눅스/ | ||
| + | |||
| + | ==== 해결 방법: 폴링(Polling) 방식 구현 ==== | ||
| + | 데이터 수신을 위해 자동 알림 방식 대신, 프로그램이 직접 수신 버퍼를 주기적으로 확인하는 **폴링(Polling) 방식**을 사용해야 합니다. | ||
| + | |||
| + | |||
| + | |||
| + | === 구현 가이드라인 === | ||
| + | - **별도 스레드 생성:** 메인 UI가 멈추지 않도록 수신 전용 스레드를 생성하십시오. | ||
| + | - **BytesToRead 확인:** 루프 내에서 '' | ||
| + | - **적절한 지연(Sleep): | ||
| + | |||
| + | <code csharp> | ||
| + | // 예시 코드 (C#) | ||
| + | Thread receiveThread = new Thread(() => { | ||
| + | while (serialPort.IsOpen) { | ||
| + | if (serialPort.BytesToRead > 0) { | ||
| + | // 데이터 읽기 처리 | ||
| + | string data = serialPort.ReadExisting(); | ||
| + | Console.WriteLine(" | ||
| + | } | ||
| + | Thread.Sleep(10); | ||
| + | } | ||
| + | }); | ||
| + | receiveThread.Start(); | ||
| + | </ | ||
| + | ===== 예제 프로그램 ===== | ||
| + | |||
| + | 클라이언트와 서버간의 단순 통신 예제입니다. C#을 사용해서 짠 소스입니다. | ||
| + | |||
| + | '' | ||
| + | |||
| + | | {{ : | ||
| + | |||
| + | |||
| + | {{ : | ||
| + | |||
| + | [[comfilepi: | ||
