Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程,如果线程崩溃,应用程序会发生什么_C#_Multithreading_.net 3.5 - Fatal编程技术网

C# 多线程,如果线程崩溃,应用程序会发生什么

C# 多线程,如果线程崩溃,应用程序会发生什么,c#,multithreading,.net-3.5,C#,Multithreading,.net 3.5,我是多线程应用程序的新手。在开始工作之前,我几乎没有什么疑问。 有人能澄清这些疑问吗 如何处理多线程应用程序中的异常 如果在任何一个线程中有任何异常,整个应用程序都会出现吗 下来?或者所有其他线程都将继续 如何处理多线程应用程序中的异常 最好的方法是在线程内,但有时(线程池)这很难。处理未处理的异常取决于应用程序的类型: WPF:使用 控制台或服务:使用 ASP.NET,WinForms。。。有自己的机制 但是请考虑:特别是在开发允许默认处理并落入调试器时(添加if(debugger.IsA

我是多线程应用程序的新手。在开始工作之前,我几乎没有什么疑问。 有人能澄清这些疑问吗

  • 如何处理多线程应用程序中的异常
  • 如果在任何一个线程中有任何异常,整个应用程序都会出现吗 下来?或者所有其他线程都将继续
  • 如何处理多线程应用程序中的异常

    最好的方法是在线程内,但有时(线程池)这很难。处理未处理的异常取决于应用程序的类型:

    • WPF:使用
    • 控制台或服务:使用
    ASP.NET,WinForms。。。有自己的机制

    但是请考虑:特别是在开发允许默认处理并落入调试器时(添加
    if(debugger.IsAttached){debugger.Break();}
    对于定义永久断点非常有帮助

    如果在任何一个线程中有任何异常,整个应用程序会停止运行吗

    这取决于。在ASP.NET中:否(如果启用了调试,您将看到死亡的黄色屏幕,否则将导致500服务器错误);在其他主机中:取决于(但通常答案是是是,进程将终止)


    在.NET版本之间,这方面的一些细节已经发生了变化–通常会变得更加严格,因此您需要进行研究。最后:在.NET 4中,当然,也可能在之前,出现了某些例外情况(例如,
    StackOverflowException
    )无法捕获,因为如果抛出一致的进程状态,则没有可靠的方法使其保持一致。

    如果使用TPL,则可以使用聚合异常。此聚合异常是异常的集合,您可以循环遍历这些异常,以查看哪个线程执行失败。更多信息可在此处找到。

    @Anonymous您可以删除吗orate?@Matt做一些ASP.NET编码,除非你把一切都做好,否则你会看到很多。这是ASP.NET错误显示。谢谢。我是VB.NET编码员,所以我只见过BSOD(太频繁了!)