多线程应用程序中的异常.

Fun*_*unc 7 .net c# multithreading exception

我从一个非常挑剔的人那里听说,在一个线程中抛出(并且未被捕获)的异常正在传播到父线程.真的吗?我尝试过类似的东西,但无法在创建线程中捕获异常.

    static void Main(string[] args)
    {
        ParameterizedThreadStart pts = 
           new ParameterizedThreadStart(ThreadMethod);
        try
        {
            Thread t = new Thread(pts);
            t.Start(new object());
            Console.ReadLine();
        }
        catch (Exception ex) //the exception is not caught
        {
            Debugger.Break();
        }
    }


    static void ThreadMethod(object @object)
    {
        Thread.Sleep(2000);
        throw new IndexOutOfRangeException();
        Thread.CurrentThread.Abort();
    }
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 12

线程的异常不会传播到主线程的上下文.这确实有意义 - 在抛出异常时,主线程通常与包含异常处理程序的范围完全不同.

您可以通过挂钩到AppDomain.UnhandledException来捕获这些异常(通常是记录它们).有关详细信息,请参阅该页面,包括Windows窗体应用程序的差异等.