Ceci est un suivi de mon initial question et je voudrais présenter mes conclusions et demander des corrections, des idées et des idées. Mes conclusions (ou plutôt interprétations) proviennent des réponses des gens à ma question précédente, en lisant la documentation MSDN .NET 3.5 et le débogage du code .NET 3.5. J'espère que cela sera utile à quelqu'un qui se demande comme moi comment détecter quand une application se termine.Comment détecter quand l'application se termine?
Evénements:
System.AppDomain.CurrentDomain.ProcessExit
: soulevés lorsque les sorties de processus, par exemple, après la valeur par défautAppDomain
et tout le reste a été déchargé [Le temps total d'exécution est limité à seulement 3 secondes!]. Pour WPF, utilisez plutôtSystem.Windows.Application.Exit
. Pour Windows Forms, exécutez le code suivantApplication.Run(...)
dans la méthode principale.System.AppDomain.CurrentDomain.DomainUnload
: déclenché lorsqu'unAppDomain
autre queAppDomain
par défaut décharge, par ex. lors de l'exécution de classes avec des frameworks de tests unitaires (MbUnit avec TestDriven.NET).System.AppDomain.CurrentDomain.UnhandledException
: (si elle est manipulée en défautAppDomain
:) pour toute exception soulevée dans un fil non gérée, peu importe ce que le filAppDomain
a commencé en Cela signifie, cela peut être utilisé comme fourre-tout pour toutes les exceptions non gérées..System.Windows.Application.Exit
: déclenché lorsque l'application WPF (c'est-à-dire la valeur par défautAppDomain
) se termine normalement. RemplacezSystem.Windows.Application.OnExit
pour en profiter. Finalisateurs (destructeurs en C#): exécutés lorsque le garbage collector libère des ressources non managées. [La durée totale d'exécution est limitée!].
Ordre des événements:
application WPF: sortie gracieuse
System.Windows.Application.Exit
System.AppDomain.CurrentDomain.ProcessExit
- Finaliseurs
application WPF: exception non gérée
System.AppDomain.CurrentDomain.UnhandledException
MbUnit courant à l'intérieur TestDriven.NET: test réussi (sortie gracieuse)
System.AppDomain.CurrentDomain.DomainUnload
- Finaliseurs
MbUnit s'exécutant dans TestDriven.NET: test a échoué (les exceptions non gérées sont traitées par MbUnit)
AppDomain.CurrentDomain.DomainUnload
- Finaliseurs
Questions:
- mes interprétations/sont-conclusions correctes?
- Connaissez-vous plus de détails que j'ai sur ? Par exemple. Quel est le temps d'exécution total pour les finaliseurs ? Vous connaissez d'autres événements/ que je connais?
- Quels événements existent et quel ordre sont-ils générés dans d'autres applications, par ex. Windows Forms, Web Service, site Web ASP.NET, etc?
Juste une note/FYI: ceci est seulement disponible en 3.0+ .NET, vous devrez créer un lien contre System.Core.dll à utiliser dans .NET 2.0 –