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?
si dovrebbe essere in grado di aggiungere un gestore eventi per 'evento OnException' dell'applicazione e gestire l'eccezione c'è. –
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; ' –
Questo ragazzo sembra brutto:/ Né eccetto, né infine sono mai stati raggiunti e l'applicazione si blocca. –