7
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 中?

谢谢!

4

1 回答 1

7

当线程被手动调用Thread.Interrupt中断时,会引发线程中断异常。Windows 本身不会使用该方法中断您的线程。通常,您的程序将控制何时向线程发送中断信号(并非一直如此)。由于中断信号可用于某些流控制,因此通常不会快速连续发送两次。

ThreadInterruptedException 在被中断的线程中抛出,但直到线程阻塞。如果线程从不阻塞,则永远不会抛出异常,因此线程可能会在不被中断的情况下完成。

如果您的线程从不休眠或等待其他对象(进入 WaitSleepJoin 状态),您将永远不会看到抛出的异常。

保护你的线程应该是可以接受的。不要忘记也可以抛出 ThreadAbortException,而且这些异常更普遍并且可以更频繁地抛出(应用程序正在关闭等)。

于 2010-07-22T21:23:19.880 回答