public void threadMethod()
{
try
{
// do something
}
catch (ThreadInterruptedException e)
{
Console.WriteLine("[Net]", role, "Thread interrupted.");
n.CloseConnection();
}
finally
{
if (isAutenticated == false)
{
n.CloseConnection();
}
Dispatcher.Invoke(addMessage, "Network connection searching was disabled.");
DebuggerIX.WriteLine("[Net]", role, "Finished");
Dispatcher.Invoke(threadStoppedDel);
}
}
方法 threadMethod 通过 System.Threading.Thread 运行。线程可能会被中断,因此可能会在finally块中抛出异常 ThreadInterruptedException ,对吗?我是否必须再次将该块封装在try-catch中?
谢谢!
答案 0 :(得分:7)
当线程被手动调用Thread.Interrupt中断时,抛出线程中断的异常。 Windows本身不会使用该方法中断您的线程。通常,您的程序将控制线程何时发送中断信号(而不是所有时间)。由于中断信号可用于某些流量控制,因此通常不会连续两次发送。
在中断的线程中抛出ThreadInterruptedException,但直到线程阻塞。如果线程永远不会阻塞,则永远不会抛出异常,因此线程可能会完成而不会被中断。
如果您的线程从不休眠或等待其他对象(进入WaitSleepJoin状态),您将永远不会看到抛出的异常。
保护您的线程应该是可以接受的。不要忘记也可以抛出一个ThreadAbortException,并且它们会更加普遍,并且可以更频繁地抛出(应用程序正在关闭等)。