【发布时间】:2009-11-10 19:21:32
【问题描述】:
我正在研究我的 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 中运行。
【问题讨论】:
-
请给出Library1.Class1的定义。