Re[2]: Unhandled exception из Thread: как не валить процесс?
От: another_coder Россия  
Дата: 22.05.15 11:18
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, another_coder, Вы писали:


_>>Как запустить поток так, чтобы строка, выводящая "waiting" выполнилась и программа нормально завершилась?

S>Обернуть запускаемый код в свой хелпер с try-catch. Чужой недоверенный код — вынести в отдельный домен/процесс (смотря насколько всё запущено).

Понятно. А так чтобы без try-catch? Хочется, чтобы поток умер просто, без остановки основного процесса. Я пробовал с AppDomain (запускал поток внутри созданного), но это не дало нужный мне результат. Вот так было:
        class A : MarshalByRefObject 
        {
            public void M()
            {
                var d = new Thread(RaiseException);
                d.Start();
            }

            public static void RaiseException(object state)
            {
                Console.WriteLine("RaiseException");
                throw new Exception();
            }
        }

        static void Main(string[] args)
        {
            var ads = new AppDomainSetup();
            ads.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
            ads.DisallowBindingRedirects = false;
            ads.DisallowCodeDownload = false;
            ads.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
            var ad = AppDomain.CreateDomain("AD", null, ads);

            A a = (A)ad.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, "A");
            a.M();

            
            Thread.Sleep(5000);
            Console.WriteLine("waiting...");
            Console.ReadKey();
        }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.