Здравствуйте, _Claus_, Вы писали:
_C_>Здравствуйте, Undertaker, Вы писали:
U>>Я недавно столкнулся с такой же проблемой. Беда в том, что Thread.Abort абортит поток только в случае, если он был заблокирован в managed коде. Т.к. HttpListener это всего лишь обертка над http.sys, которая входит в ядро ОС, и блокировка происходит уже в unmanaged коде, то прервать выполнение потока не получается.
_C_>Совершенно справедливо!
_C_>Меня смущает, что в .net нет аналога C exit() ? Этож почему я не могу завершить прогу, если хочу?!
а так:
static void Main(string[] args)
{
Console.WriteLine("Main() стартует...");
AppDomain ad = AppDomain.CreateDomain("worker");
Thread t = new Thread(delegate()
{
ad.DoCallBack(Work);
});
t.Start();
Thread.Sleep(100);
Console.WriteLine("Пробуем убить Work()...");
t.Abort();
if (!t.Join(2000))
Console.WriteLine("Work() убиться отказался :(");
else
Console.WriteLine("Work() убит!");
Console.WriteLine("Выгружаем домен");
AppDomain.Unload(ad);
Console.WriteLine("Поток завершен и программа тож!");
}
static void Work()
{
Console.WriteLine("Work() стартует...");
// тут нечто неубиваемое
Console.WriteLine("Work() нормально завершается");
}
... << RSDN@Home 1.2.0 alpha rev. 675>>