Menedżer tetheringu aplikacji Delphi rezerwuje 20 portów w zakresie od 2020 do 2039, aby uruchomić wątki komunikacyjne. Chciałem dowiedzieć się, co się stanie, gdy 21 aplikacja zostanie uruchomiona na tym samym komputerze. Okazuje się, że ta aplikacja po prostu przestaje reagować, dopóki nie zostanie zabita i nie znalazłem sposobu na zakończenie jej z wdziękiem.Delphi XE8 z wdziękiem obsługuje ETetheringException przy starcie aplikacji
Aby odtworzyć, po prostu upuść TTetheringManager i TTetheringProfile na pustym formularzu, połącz profil z Menedżerem, skompiluj, uruchom aplikację 20 razy poza IDE i wreszcie uruchom 21. instancję w IDE.
To co znalazłem do tej pory:
W System.Tether.NetworkAdapter: Procedura TTetheringNetworkManagerCommunicationThread.Execute; an ETetheringException.Create (SManagerNetworkCreation) jest wywoływany, gdy nie można uruchomić serwera komunikacyjnego TCP lub UDP. Jak na razie dobrze.
Ten wyjątek pojawia się w debugerze. Kiedy kontynuuję i przechodzę przez poniższy kod, aplikacja w końcu zawiesza się w System: function AcquireExceptionObject i nigdy nie wraca.
Ponieważ aplikacja jest podnoszona podczas Application.Run, próbowałem złapać wyjątek poprzez:
try
Application.Run;
except
ShowMessage('Something went terribly wrong!');
end;
ale to nie działa. Jakieś sugestie, w jaki sposób mogę złapać (lub zapobiec) ten wyjątek?
powinien być w stanie dodać moduł obsługi zdarzeń dla 'OnException' przypadku aplikacji i obsługi nie wyjątek. –
Dzięki za sugestię, ale to też nie pomoże. Próbowałem ustawić Application.OnException, ale ta procedura obsługi zdarzenia nigdy nie jest wykonywana. Wyjątek można również uruchomić, przypisując menedżer TetherManager do profilu TetherProfile w czasie wykonywania, na przykład: 'procedure TForm1.FormShow (Sender: TObject); Rozpocznij spróbuj spróbuj TetheringAppProfile1.Manager: = TetheringManager1; oprócz ShowMessage ("Coś poszło nie tak:"); koniec; wreszcie ShowMessage ("Wreszcie się udało"); koniec; koniec; ' –
Chłopiec to wygląda brzydko:/ Ani za wyjątkiem, ani w końcu nie są osiągane, a aplikacja po prostu się zawiesza. –