ThreadInterruptedException

ThreadInterruptedException

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

谢谢!

最佳答案

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



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

尽可能保护线程是可以接受的。别忘了也可以抛出ThreadAbortException,并且它们更普遍并且可以更频繁地抛出(应用程序关闭等)。

09-11 20:18