默认应用程序域的卸载事件?

Ian*_*oyd 3 c# clr appdomain

是否有一个卸载事件,或者任何事件,通知,消息,机制或挂钩,可以用来在“默认”应用程序域卸载之前得到通知?

我有一些代码需要知道应用程序域(几乎总是默认域)何时结束。

注意:我不知道开发人员在使用我的代码时将创建什么样的应用程序。它可能是:

  • 控制台应用程序
  • WinForms应用程序
  • 一个ASP.net应用程序
  • 一个ASP.net网站
  • 运行时可调用包装(RCW)COM对象
  • Windows资源管理器外壳程序扩展
  • 或Windows服务

无论哪种方式,我都需要知道域关闭的时间,以便我可以执行一些“工作”。而且我不会要求用户调用任何形式的“关闭”或“清理”方法。(此外,建议要求用户自己调用方法并不能回答问题:这是有关在我正在运行的应用程序域关闭时收到通知的)。

也可以看看

Ian*_*oyd 7

我忘记了我对这个问题的其他细微改动后的回答。最终,答案来自MA 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();
   }

   ...
}
Run Code Online (Sandbox Code Playgroud)

注意:任何代码都会发布到公共领域。无需注明出处。