AppDomain.CurrentDomain.DomainUnload不会在控制台应用程序中引发

时间:2010-04-22 17:47:57

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

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

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

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

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

使用.NET 3.5和C#

2 个答案:

答案 0 :(得分:12)

不幸的是,此事件不会在默认AppDomain中引发,只会在默认AppDomain中创建的应用域中生成。

来自MSDN documentation

  

这个事件永远不会在   默认应用程序域。

答案 1 :(得分:1)

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

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();
    }
}