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.
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.
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'
Odpinanie rs232 przy włączonym kompie nie jest raczej wskazane. Bez sensu byłoby uodporniać program na taką ewentualność.
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.