Здравствуйте, 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();
}