Cześć,
jakiś czas temu napisałem program który między innymi łączy się z prostym wyświetlaczem LCD. Wyświetlacz skonstruowałem na Arduino i podłączam go do komputera kabelkiem USB. Doinstalowuje się w tym czasie wirtualny port COM (sterowniki od Arduino).
Wszystko działa idealnie gdy istnieje port COM, nawet start programu bez portu COM nie robi problemów, po prostu brak tego portu na starcie aplikacji wyłącza tą funkcjonalność.
Problem jest bardzo duży gdy port COM istnieje w trakcie startu programu a później znika, niestety jako że jest to USB a obsługa jest zdolna do wszystkiego takie coś może się zdarzyć.
Dostaję wtedy wyjątek który jest nie do "ubicia". Jedyne wyjście to zabicie procesu w Menadżerze zadań co jest zbyt skomplikowane dla obsługi - oni po prostu wyłączają komputer.
Konkrety, używam komponentu ComPort Library https://sourceforge.net/projects/comport/
Problem jest znany ale nie do końca rozwiązany. Większość rozwiązań sugeruje lekką modyfikację kodu w źródle komponentu a konkretnie w procedurze TCustomComPort.AbortAllAsync.
Rzeczywiście, taka podmiana powoduje że program pomimo wyskakujących komunikatów o błędzie pozwala się (z trudem ale jednak) zamknąć. Ale to nie jest przecież rozwiązanie.
Problem z komponentem jest taki że po prostu nie rozpoznaje on że nie ma już portu COM, zdarzenie onError albo onException się nie zdarza chyba nigdy. To by rozwiązało problem.
Może ktoś z was już pokonał ten problemik i podzieli się uwagami albo ma jakąś sugestię?