我正在研究我的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
中运行。
答案 0 :(得分:2)
UnhandledException
事件不会捕获传统意义上的异常,就像try-catch块(据我所知),它只是一个信息点,允许您可以执行日志记录和此类任务。
此事件提供通知 没有被捕的例外。它允许 应用程序记录有关的信息 系统之前的例外 默认处理程序报告异常 给用户并终止 应用
因此异常仍然会冒泡到系统默认的异常处理程序。
答案 1 :(得分:0)
AddHandler Application.ThreadException, AddressOf MyExceptionHandler.HandleException
添加顶级异常处理程序,但在这种情况下可能无法执行您想要的操作。