c# - 多线程应用程序中的异常。

标签 c# .net 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();
    }

最佳答案

线程的异常不会传播到主线程的上下文。这确实有道理 - 到异常被抛出时,主线程通常与包含异常处理程序的线程处于完全不同的范围内。

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

关于c# - 多线程应用程序中的异常。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569580/

相关文章:

c# - C#中的多线程和多任务处理之间的区别

java - Spring 批处理 corePoolSize VS throttle 限制

c# - Xamarin studio 中没有(IOS Bundle Signing)选项

c# - 在 Microsoft Sync Framework 中获取更改摘要

java - 使用循环屏障不会等到所有线程完成

c# - Entity Framework 4.0 - 版本控制

javascript - knockout 组列表为带有对象的更小列表

c# - WPF 为描边和填充塑造不同的不透明度

C# 窗体 : How to make Return press Send?

c# - 如何从 HttpClientHandler.CookieContainer 获取 cookie