У меня были пользователи, жаловавшиеся на " Я создал простое консольное приложение, единственная цель которого - создать новый AppDomain, в который я загружаю очень простую сборку и вызываю один из ее методов. Этот метод вызывает исключение StackOverflowException. Это приводит к тому, что мое консольное приложение бесцеремонно завершается.
Мое желаемое поведение состоит в том, чтобы «дочерний» домен приложения аварийно завершал работу и сгорал при таком исключении, но не затрагивал мое консольное приложение, работающее в «родительском» домене приложений.
Возможно ли это?
ОБНОВЛЕНИЕ: вот код. Ни один из обработчиков исключений не задействован.
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
// create app domain
var domain = AppDomain.CreateDomain("MyDomain");
// create a component
var component = (MyComponent)domain.CreateInstanceAndUnwrap(
"AppDomainMonitor.Component",
typeof(MyComponent).FullName);
// create a thread from a method on this component
var thread = new Thread(component.CauseStackOverflow);
// start the thread
thread.Start();
Console.ReadKey();
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
// never hit
}
}
public class MyComponent : MarshalByRefObject
{
public void CauseStackOverflow()
{
try
{
Infinite();
}
catch (Exception ex)
{
// never hit
}
}
void Infinite()
{
Infinite();
}
}