问题
Is there an Unload event, or any event, notification, message, mechanism, or hook, that i can use to be notified before the "default" application domain is unloaded?
i have code that needs to know when the application domain (almost always the default domain) is ending.
Note: i don't know what kind of application a developer will be creating when he uses my code. It could be:
- a console application
- a WinForms application
- an ASP.net application
- an ASP.net web-site
- Runtime Callable Wrapper (RCW) COM object
- a Windows Explorer shell extension
- or a Windows Service
Either way, i need to know when the domain is closing, so i can do some "stuff". And i am not going to require the user to call any sort of "Shutdown" or "Cleanup" method. (Also, suggesting that the user be required to call a method themselves doesn't answer the question: which is about being notified when the app domain i'm running in is shut down).
See also
- Unload event for the default AppDomain?
- How to get notified before static variables are finalized
回答1:
i forgot to cross post my own answer from my other slight variation of this question. Ultimately, the answer came from an answer by M.A. Hanin.
There is no DomainUnload
, but there is a ProcessExit
:
class Contoso
{
//constructor
public Contoso()
{
//...
//Catch domain shutdown (Hack: frantically look for things we can catch)
if (AppDomain.CurrentDomain.IsDefaultAppDomain())
AppDomain.CurrentDomain.ProcessExit += MyTerminationHandler;
else
AppDomain.CurrentDomain.DomainUnload += MyTerminationHandler;
}
private void MyTerminationHandler(object sender, EventArgs e)
{
//The domain is dying. Serialize out our values
this.Dispose();
}
...
}
Note: Any code is released into the public domain. No attribution required.
回答2:
AppDomain.CurrentDomain.DomainUnload +=
(object sender, EventArgs e) => { /*do stuff*/ };
来源:https://stackoverflow.com/questions/18033100/unload-event-for-the-default-application-domain