AppDomain.UnhandledException
Никогда не задумывался над тем, что событие AppDomain.UnhandledException предназаначено для самого домена. То есть, если домен A создает домен B, и хочет получать все ошибки, которые в B произошли, то кода:
Один из выходов в данной ситуации - загрузить в домен B класс, который сделает все что надо прямо там, на месте:
где:
Вот теперь, ErrorHandler, сможет обработать все ошибки. В том, что класс Loader находится прямо в domainB есть плюс: если мы захотим выгрузить domainB, то одновременно выгрузится и класс, отвечающий за его ошибки.
domainB.UnhandledException +=будет маловато. Потому, что вызов между доменами это уже remoting, а значит начинается совершенно другая песня: MarshalByRefObject, ISerializable и ему подобное.
new UnhandledExceptionEventHandler(ErrorHandler);
Один из выходов в данной ситуации - загрузить в домен B класс, который сделает все что надо прямо там, на месте:
Loader ldr = (Loader)domainB.CreateInstanceAndUnwrap(
"assemblyName", "typeName");
ldr.RegisterErrorHandler();
где:
void RegisterErrorHandler() {
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(ErrorHandler);
}
Вот теперь, ErrorHandler, сможет обработать все ошибки. В том, что класс Loader находится прямо в domainB есть плюс: если мы захотим выгрузить domainB, то одновременно выгрузится и класс, отвечающий за его ошибки.
Коментарі