Я работаю над 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
?
UPDATE:
В соответствии с просьбой, я включил определение 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
.