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窗体应用程序的差异等.