【问题标题】:AppDomain.CurrentDomain.DomainUnload not be raised in Console appAppDomain.CurrentDomain.DomainUnload 不在控制台应用程序中引发
【发布时间】:2011-02-11 04:45:24
【问题描述】:

我有一个程序集,当访问它时会启动一个线程来处理放置在队列中的项目。在该程序集中,我将处理程序附加到 DomainUnload 事件:

AppDomain.CurrentDomain.DomainUnload += new EventHandler(CurrentDomain_DomainUnload);

该处理程序将线程连接到主线程,以便队列中的所有项目都可以在应用程序终止之前完成处理。

我遇到的问题是控制台应用程序终止时没有触发 DomainUnload 事件。任何想法为什么会这样?

使用 .NET 3.5 和 C#

【问题讨论】:

    标签: c# .net multithreading .net-3.5


    【解决方案1】:

    很遗憾,此事件不会在默认 AppDomain 中引发,只会在默认 AppDomain 中创建的应用域中引发。

    来自MSDN documentation

    此事件从未在 默认应用程序域。

    【讨论】:

      【解决方案2】:

      您需要为特定域订阅事件。您也不能依赖在终止时卸载域。从此代码中删除注释以查看:

      using System;
      using System.Reflection;
      
      class Program {
          static void Main(string[] args) {
              var ad = AppDomain.CreateDomain("test");
              ad.DomainUnload += ad_DomainUnload;
              //AppDomain.Unload(ad);
              Console.ReadLine();
          }
          static void ad_DomainUnload(object sender, EventArgs e) {
              Console.WriteLine("unloaded, press Enter");
              Console.ReadLine();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        相关资源
        最近更新 更多