2015-06-16 18 views
8

Der Delphi App-Tethering-Manager reserviert 20 Ports im Bereich von 2020-2039, um seine Kommunikations-Threads zu starten. Ich wollte herausfinden, was passiert, wenn die 21. Anwendung auf dem gleichen Computer gestartet wird. Es stellt sich heraus, dass diese Anwendung nicht reagiert, bis sie beendet wird und ich keine Möglichkeit gefunden habe, sie ordnungsgemäß zu beenden.Delphi XE8 behandelt elegant ETetheringException beim Start der Anwendung

Geben Sie einfach einen TTetheringManager und ein TTetheringProfile in ein leeres Formular ein, verbinden Sie das Profil mit dem Manager, kompilieren Sie, starten Sie die Anwendung 20 mal außerhalb der IDE und starten Sie schließlich die 21. Instanz in der IDE.

Dies ist, was ich bisher herausgefunden:

In System.Tether.NetworkAdapter: procedure TTetheringNetworkManagerCommunicationThread.Execute; an ETetheringException.Create (SManagerNetworkCreation) wird ausgelöst, wenn der TCP- oder der UDP-Kommunikationsserver nicht gestartet werden konnte. So weit, ist es gut.

Diese Ausnahme wird im Debugger angezeigt. Wenn ich fortfahre und durch den folgenden Code gehe, hängt die Anwendung schließlich in System: Funktion AcquireExceptionObject und kehrt nie zurück.

Da die Anwendung bei Application.Run angehoben wird, habe ich versucht, die Ausnahme über zu fangen:

try 
    Application.Run; 
except 
    ShowMessage('Something went terribly wrong!'); 
end; 

aber das hat nicht funktioniert. Irgendwelche Vorschläge, wie ich diese Ausnahme fangen (oder verhindern) kann?

+0

Sie sollten einen Event-Handler für die Anwendung des 'OnException' Veranstaltung und behandeln die Ausnahme dort der Lage sein, hinzuzufügen. –

+0

Danke für Ihren Vorschlag, aber das hilft auch nicht. Ich habe versucht, Application.OnException zu setzen, aber dieser Event-Handler wird nie ausgeführt. Die Ausnahme kann auch ausgelöst werden, indem der TetherManager zur Laufzeit dem TetherProfile zugewiesen wird, z. B .: 'procedure TForm1.FormShow (Sender: TObject); beginne versuche versuche TetheringAppProfile1.Manager: = TetheringManager1; außer ShowMessage ("Etwas ist hier schief gelaufen: '); Ende; schließlich ShowMessage ('Endlich gemacht'); Ende; Ende; ' –

+0

Boy das sieht hässlich aus:/ Weder außer noch schließlich werden jemals erreicht und die Anwendung hängt einfach. –

Antwort