2010-08-13 5 views
0

내가 C# (.Net Framework 2.0)에서 작업하고있는 프로그램은 '원격 모드'로 전환하고 다른 화면으로 ASCII 데이터를 보낼 수있는 기능이 필요합니다. 블루투스. 필자는 경험이 풍부한 프로그래머가 아니며 네트워킹에 대해 전혀 모르지만 어제 SerialPort 클래스를 속여 두 개의 블루투스 연결 장치간에 제대로 작동하는 작은 채팅 프로그램을 만들 수있었습니다. .System.IO.Ports.SerialPort Write() Timeout

그러나 채팅 프로그램은 사용자가 데이터를 보내기 위해 버튼을 눌렀을 때만 데이터를 보냈습니다. 두 장치가 올바르게 연결되지 않았다면 오류 메시지와 함께 TimeoutException을 던졌습니다. 지금 작업하고있는 프로그램은 훨씬 더 크며 COM 포트가 열려있는 한 계속해서 데이터를 쓰려고합니다.

두 장치가 즉시 연결되어 있지 않으면 TimeoutException을 던져야하며 제대로 연결될 때까지 계속해서 다시 던져 버릴 것입니다. 그건 용납 할 수없는 일입니다. 프로그램을 사용할 수없는 지점까지 프로그램이 느려지고 Debugout 출력에 "TimeoutException Thrown Here"오류 메시지가 표시됩니다.

이 작업을 수행하는 더 좋은 방법이 있습니까? 두 가지 장치가 연결되어 있는지를 지속적으로 확인하지 않고 (그리고 확인하면서 시간 초과 오류가 발생하지 않고) 데이터를 출력 할 수있는 방법이 있습니다.

답변

1

No. 시리얼 연결은 이며 상태 비 저장입니다.

이것은 누군가 다른쪽에 있는지 여부를 알 수 없음을 의미합니다. 당신이 할 수있는 일은 의미있는 것이 돌아 오면 뭔가를 보내고 살펴 보는 것입니다.

가장 쉬운 예는 좋은 아날로그 모뎀입니다. 연결되어 있는지 알아 보려면 AT을 보내고 OK이 다시 나타나는지 확인하십시오.

솔루션이 맞지만 제대로 구현되지 않았을 수 있습니다. 연결 구축 시퀀스를 BackgroundWorker에 넣어야합니다. 따라서 이러한 시도는 GUI가 사용자에게 반응하는 동안 다른 스레드에서 수행됩니다.

+0

나는 이것에 대해 어떻게 생각하는지 모르겠다. 나는 내가하고있는 일에 대해 잘 모른다는 생각을 가지고 실제로 그것을위한 '올바른'해결책을 가지고 있다는 것이 좋다. 그것이 내가 원하는 곳으로 나를 보내지 않는다는 사실은 덜 고무적입니다. 하지만 그 배경이 한 발을 내딛게 할 것이고, 그것이 나의 문제를 완화시키는 지 알 수있을 것입니다. – KChaloux