Я звоню ChannelServer.ListeningThread.Abort
в следующем потоке, однако ничего не происходит. Я хотел бы быть более конкретным, но я не могу ничего придумать. Похоже, что ThreadAbortException
не выбрасывается, и это исключение должно быть выброшено независимо от блокирующего прослушивателя (оно отлично работает с потоками, которые получают блокировку).
Важное EDIT: с ManualResetEvent.WaitOne
вместо AcceptSocket
, как предложил Лирик для тестирования, все работает отлично. Почему AcceptSocket
блокирует ThreadAbortException
?
ССЫЛКА: эта ветка форума, кажется, обсуждает ту же проблему, хотя я ничего не могу понять: http://www.tek-tips.com/viewthread.cfm?qid=319436&page=413
ChannelServer.ListeningThread = new Thread(new ThreadStart(delegate()
{
Log.Inform("Waiting for clients on thread {0}.", Thread.CurrentThread.ManagedThreadId);
while (true)
{
try
{
new Thread(new ParameterizedThreadStart(ChannelClientHandler.Initialize)).Start(ChannelServer.Listener.AcceptSocket());
}
catch (ThreadAbortException)
{
Log.Inform("Aborted client listening thread {0}.", Thread.CurrentThread.ManagedThreadId);
break;
}
}
}));
ChannelServer.ListeningThread.Start();