2015-06-16 12 views
8

Il responsabile del tethering dell'app Delphi riserva 20 porte nell'intervallo dal 2020-2039 per avviare i suoi thread di comunicazione. Volevo scoprire cosa succede, quando la 21a applicazione viene avviata sullo stesso computer. Si scopre che questa applicazione non si blocca fino a quando non viene uccisa e non ho trovato un modo per terminarlo con grazia.Delphi XE8 gestisce con garbo ETetheringException all'avvio dell'applicazione

Per riprodurre, basta rilasciare un TTetheringManager e un TTetheringProfile su un modulo vuoto, connettere il profilo a Manager, compilare, avviare l'applicazione 20 volte all'esterno dell'IDE e infine avviare l'21st instance nell'IDE.

Questo è quello che ho scoperto finora:

In System.Tether.NetworkAdapter: procedura TTetheringNetworkManagerCommunicationThread.Execute; an ETetheringException.Create (SManagerNetworkCreation) viene generato quando non è possibile avviare il server di comunicazione TCP o UDP. Fin qui tutto bene.

Questa eccezione si presenta nel debugger. Quando continuo e passaggio attraverso il seguente codice, l'applicazione si blocca infine in Sistema: funzione AcquireExceptionObject e non restituisce mai.

Dal momento che l'applicazione è sollevata durante Application.Run, ho cercato di intercettare l'eccezione tramite:

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

ma questo non ha funzionato. Qualche suggerimento su come posso prendere (o prevenire) questa eccezione?

+0

si dovrebbe essere in grado di aggiungere un gestore eventi per 'evento OnException' dell'applicazione e gestire l'eccezione c'è. –

+0

Grazie per il tuo suggerimento, ma questo non aiuta neanche. Ho provato a impostare Application.OnException, ma questo gestore di eventi non viene mai eseguito. L'eccezione può anche essere attivata assegnando il TetherManager al TetherProfile in fase di esecuzione, ad esempio: 'procedure TForm1.FormShow (Sender: TObject); inizio provare provare TetheringAppProfile1.Manager: = TetheringManager1; eccetto ShowMessage ('Qualcosa è andato storto qui:'); fine; infine ShowMessage ('Finally made it'); fine; fine; ' –

+0

Questo ragazzo sembra brutto:/ Né eccetto, né infine sono mai stati raggiunti e l'applicazione si blocca. –

risposta

Problemi correlati