wyjątek SerialPort : operacja We/Wy została przerwana

0

Mam aplikację, która komunikuje się z urządzeniem przez Rs232 (SerialPort) i czasami program zgłasza wyjątek: "Operacja We/Wy została przerwana z powodu zakończenia wątku lub żądania aplikacji". Szczególnie program zgłasza błąd, gdy wyjmuję wtyczkę z urządzenia jedną stroną bardziej niż drugą. Na jednym forum otrzymałem informację, że to wina aplikacji WindowsForms, która jest właścicielem wątku portu więc stworzyłem aplikację konsolową i wyjątek pojawia się niemal przy każdorazowym wyciągnięciu wtyczki rs232 z urządzenia. Informacje zawarte tu: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2242017&SiteID=1 już raczej przerobiłem. Ma ktoś jakiś pomysł. Z gory dzieki.

0

Znaczy wyciągasz wtyczkę w trakcie pracy programu i program rzuca wyjątkiem?
To może nie wyciągaj wtyczki.
Albo popraw kod tak, aby program wykrywał, czy urządzenie jest podłączone.

0
somekind napisał(a)

Znaczy wyciągasz wtyczkę w trakcie pracy programu i program rzuca wyjątkiem?
To może nie wyciągaj wtyczki.
Albo popraw kod tak, aby program wykrywał, czy urządzenie jest podłączone.

Z tym, że wtyczka jest odłączona program nie ma problemów bo po ponownym włożeniu wtyczki komunikacja powstaje. Chodzi o to, że obiekt klasy SerialPort czasami wchodzi w taki dziwny stan że każda operacja na nim wyrzuca wyjątek który podałem wcześniej.
Przykład: w momencie pojawienia się danych w buforze portu wywoływane jest zdarzenie reprezentujące metodę odpowiedzialną za zrobienie coś z tymi danymi i jeżeli wykonam jakąkolwiek operację na obiekcie SerialPort np. SerialPort.ReadByte() (a jest on w takim dziwnym stanie) wyrzucany jest wyjątek. Czasami obiekt klasy SerialPort jest w takim stanie bez wyjmowania wtyczki (wyjmowanie wtyczki to przykład, dzięki któremu udało mi się wyjątek wywołać ). Jeżeli ktoś spotkał się z tym problemem prosze o odpowiedz. Raczej zbędzne są komentarze typu 'To może nie wyciągaj wtyczki'

0

Odpinanie rs232 przy włączonym kompie nie jest raczej wskazane. Bez sensu byłoby uodporniać program na taką ewentualność.

0

Taki błąd może pojawiać się tez jeżeli np. odpalasz metodę Send z różnych wątków aplikacji. W takim wypadku trzeba upewnić się, że tylko jeden wątek w jednym czasie tylko wysyła coś na RS232.

1 użytkowników online, w tym zalogowanych: 0, gości: 1