是否有卸载事件或任何事件,通知,消息,机制或挂钩,我可以在“默认之前通知“应用程序域已卸载?
我的代码需要知道应用程序域(几乎总是默认域)何时结束。
注意:我不知道开发人员在使用我的代码时会创建什么样的应用程序。它可能是:
无论哪种方式,我都需要知道域名何时关闭,所以我可以做一些“stuff”。我不会要求用户调用任何类型的“Shutdown”或“Cleanup”方法。 (另外,建议用户自己调用方法时不会回答这个问题:当我正在运行的应用程序域关闭时会收到通知。)
答案 0 :(得分:5)
我忘了从my other slight variation of this question交叉发表我自己的回答。最终,答案来自an answer by M.A. Hanin。
没有DomainUnload
,但有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();
}
...
}
注意:任何代码都会发布到公共域中。无需归属。
答案 1 :(得分:3)
AppDomain.CurrentDomain.DomainUnload +=
(object sender, EventArgs e) => { /*do stuff*/ };