C# AppDomain在不应';T

C# AppDomain在不应';T,c#,.net,appdomain,C#,.net,Appdomain,我正在研究我的MCT,目前正在研究AppDomain功能。但我遇到了一些不清楚的事情AppDomain应捕获异常,并允许域安全卸载。(其他地方建议的StackOverflowException可能例外) 当我决定在为此目的而创建的程序集中创建示例类的实例时,我应该得到一个安全、受限的域,该域将捕获发生的错误并可以安全卸载。至少这是我从我的学习本上理解它的方式 var type = (IDoSomeWork) domain.CreateInstanceAndUnwrap("Library1", "

我正在研究我的MCT,目前正在研究AppDomain功能。但我遇到了一些不清楚的事情
AppDomain
应捕获
异常
,并允许域安全卸载。(其他地方建议的
StackOverflowException
可能例外)

当我决定在为此目的而创建的程序集中创建示例类的实例时,我应该得到一个安全、受限的域,该域将捕获发生的错误并可以安全卸载。至少这是我从我的学习本上理解它的方式

var type = (IDoSomeWork) domain.CreateInstanceAndUnwrap("Library1", "Library1.Class1");
type.Run();
但是,这会在
type.Run()
上引发异常(因为我是这样做的)。但是
AppDomain
不应该安全地捕获它吗?这不是我们有一个
AppDomain
的原因吗

更新:

根据要求,我已经包含了
库1.Class1
的定义。另外,为清楚起见,
unhandledeExceptionEventHandler
对捕获异常没有影响,并且与问题无关

[Serializable]
public class Class1 : MarshalByRefObject, IDoSomeWork
{
    public void Run()
    {
        Debug.WriteLine(AppDomain.CurrentDomain.FriendlyName);
        throw new ApplicationException(String.Format("{0}", this.ToString()));
    }
}

我已经验证了它在
MyDomain
中运行
UnhandledException
事件不会捕获传统意义上的异常,就像try-catch块(据我所知),它只是一个信息点,允许您执行日志记录和类似任务

引自:

此事件提供以下事件的通知: 未捕获的例外。它允许 用于记录有关的信息的应用程序 系统之前的异常 默认处理程序报告异常 发送给用户并终止 应用程序

因此,异常仍将冒泡到系统默认异常处理程序

 AddHandler Application.ThreadException, AddressOf MyExceptionHandler.HandleException

添加顶级异常处理程序,但在这种情况下,它可能不会执行您想要的操作。

请给出Library1.Class1的定义。但是,为什么该异常不包含在ApplicationDomain中?我不确定这是否完全回答了这个问题。@Taylor:因为这项活动不是为这样工作而设计的。文档中明确指出,事件处理程序允许应用程序在系统默认处理程序向用户报告异常并终止应用程序之前收集信息。事件的目的不是作为一个全局捕获块工作。我认为问题的重点是为什么默认的AppDomain会得到异常。例如,如果自定义(非默认)域没有未处理的ExceptionEventHandler,会发生什么情况?@Taylor:重新阅读问题,我看到了我的答案,我看到了你的困惑,必须说我开始分享它。我将暂时给出答案(其他任务的时间很短),但稍后会在一些实验后返回,除非在此之前其他人已经对这个问题有所了解。最近我问了一个关于AppDomains的问题,似乎对此话题也存在一些分歧(对Reed Copsey答案的评论)。看这里
 AddHandler Application.ThreadException, AddressOf MyExceptionHandler.HandleException