2010-04-22 24 views
4

我有一个程序集,当它被访问时,会激活一个线程来处理放置在队列中的项目。在该程序集我附加处理程序的DomainUnload事件:AppDomain.CurrentDomain.DomainUnload不会在控制台应用程序中引发

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

也就是说处理器加入线程主线程使应用程序终止之前在队列中的所有项目可以完成处理。

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

使用.NET 3.5和C#

回答

12

不幸的是你,是不是在默认的AppDomain引发此事件,仅在默认的一个内创建应用程序域。

MSDN documentation

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

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(); 
    } 
} 
相关问题