Почему исключение в дочернем домене закрывает программа? - PullRequest
2 голосов
/ 29 октября 2011

Почему исключение в одном домене приложения влияет на другой домен приложения?

Как предотвратить закрытие программы?

using System;
using System.Reflection;
using System.Threading;

namespace domain
{
public class Worker : MarshalByRefObject
{
    public static void NotMyCodeThreadProc()
    {
        throw new Exception();
    }

    public void NotMyCode()
    {
        var thread = new Thread(NotMyCodeThreadProc);
        thread.Start();
        thread.Join();
    }
}

class Program
{
    static void Main()
    {
        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, "domain.Worker");
        try
        {
            remoteWorker.NotMyCode();
        }
        catch
        {
        }
        Console.WriteLine("!");
        Console.ReadLine();
    }
}
}

1 Ответ

0 голосов
/ 09 ноября 2011

В .NET 2.0 (и более поздних версиях) необработанное исключение в потоке приводит к завершению всего процесса.

Вы можете изменить эту политику, следуя совету Ганса, или вы можете просто свернуть свой код с помощьюпопробуйте / поймайте и обработайте исключение.

...