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

Posted

技术标签:

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

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

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

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

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

使用 .NET 3.5 和 C#

【问题讨论】:

【参考方案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();
    

【讨论】:

以上是关于AppDomain.CurrentDomain.DomainUnload 不在控制台应用程序中引发的主要内容,如果未能解决你的问题,请参考以下文章