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 不在控制台应用程序中引发的主要内容,如果未能解决你的问题,请参考以下文章