我从一个非常挑剔的人那里听说,线程中抛出(但未捕获)的异常正在传播到父线程。真的吗? 我试过类似的方法,但无法在创建线程中捕获异常。
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();
}
最佳答案
线程的异常不会传播到主线程的上下文。这确实有道理 - 到异常被抛出时,主线程通常与包含异常处理程序的线程处于完全不同的范围内。
您可以通过 Hook AppDomain.UnhandledException 来捕获这些异常(通常是记录它们) .有关详细信息,请参阅该页面,包括 Windows 窗体应用程序中的差异等。
关于c# - 多线程应用程序中的异常。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569580/