它不应该由AppDomain引起的异常?

时间:2009-11-10 19:21:33

标签: c# .net appdomain

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

AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
Evidence adevidence = AppDomain.CurrentDomain.Evidence;
domain.UnhandledException += new UnhandledExceptionEventHandler(domain_UnhandledException);
AppDomain domain = AppDomain.CreateDomain("MyDomain", adevidence, setup);

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

var type = (IDoSomeWork) domain.CreateInstanceAndUnwrap("Library1", "Library1.Class1");
type.Run();

这会在type.Run()上引发异常(因为我这样做了)。但是AppDomain不应该安全地抓住它吗?这不是我们有AppDomain的原因吗?

更新

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

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

我已经确认它在MyDomain中运行。

2 个答案:

答案 0 :(得分:2)

UnhandledException事件不会捕获传统意义上的异常,就像try-catch块(据我所知),它只是一个信息点,允许您可以执行日志记录和此类任务。

引自MSDN documentation

  

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

因此异常仍然会冒泡到系统默认的异常处理程序。

答案 1 :(得分:0)

 AddHandler Application.ThreadException, AddressOf MyExceptionHandler.HandleException

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