为什么在ThreadPool线程上引发的异常不会被C#中的主线程处理

Roh*_*nsi 3 c#

我有以下代码片段.

class Program
{
    static void Main(string[] args)
    {
        try
        {
            Thread m_thread = new Thread(() =>
                {
                    //try
                    //{
                        checkexc();
                    //}
                    //catch (Exception ex)
                    //{

                    //}
                }
                );               
            m_thread.Start();

        }
        catch (Exception ex)
        {

        }
    }
    static void checkexc()
    {
        throw new NullReferenceException();
    }
}
Run Code Online (Sandbox Code Playgroud)

覆盖Try-Catch块不处理NullReferenceException.但是,如果我将委托包装在thread()构造函数中,那么它将由Try-Catch处理.为什么外部Try-Catch不处理此异常.

Mat*_*len 7

想象一下,你有一条主要道路(A),另一条道路从那条道路分支出来(B).

当卡车沿着A行驶时,如果它发生碰撞,那么A将知道它,并且交通将停止.

当卡车沿着B行驶时,如果它发生碰撞,那么B将知道它,并且交通将停止.

但通过什么机制B会告诉A一辆卡车撞上了它?

一旦卡车在B上,它不会影响A,除非沿着A到B有另一个入口点.

如何将您的其他线程中的异常传递给主线程?一旦另一个线程运行,它就不再(直接)与主线程通信.