Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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/asp.net-mvc-3/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# 在没有catch块的情况下捕获异常_C#_.net_Multithreading_Exception - Fatal编程技术网

C# 在没有catch块的情况下捕获异常

C# 在没有catch块的情况下捕获异常,c#,.net,multithreading,exception,C#,.net,Multithreading,Exception,我在一个遗留项目中工作(阅读:重构不是一个选项),它抛出了ApplicationExceptions throw new ApplicationException(string.Format("More than one type found with the name {0} in {1}", typeName, assemblies)); 上下文 我是一个相对较新的开发人员。基本的抛出/捕获异常对我来说很有意义。甚至异常的概念在调用堆栈中冒泡到另一个catch语句也让人感觉很直观 除此之外

我在一个遗留项目中工作(阅读:重构不是一个选项),它抛出了
ApplicationException
s

throw new ApplicationException(string.Format("More than one type found with the name {0} in {1}", typeName, assemblies));
上下文

我是一个相对较新的开发人员。基本的抛出/捕获异常对我来说很有意义。甚至异常的概念在调用堆栈中冒泡到另一个catch语句也让人感觉很直观

除此之外,我知道CLR能够。。某物这一行特别令人困惑(来自)

异常将向上传递到堆栈,直到应用程序处理它或程序终止

我在整个解决方案中找不到一条catch语句,这会让我认为异常会终止进程,但我在前端看到了一条错误消息—进程继续运行

我的调用堆栈的顶部是一个新线程,上面是外部代码。如果不是专有的,我会显示更多的代码

Dim installThread As New Thread(CType(Sub() InstallPackageAsyncInner(appsToOverride, package, parameters), Threading.ThreadStart))
问题

是否有可能是启动的线程死了,父线程最终传播错误消息并处理异常


如果是这样,控制权的转移是如何在
.NET
或任何相关技术中进行的?

异常处理必须在AppDomain级别进行(因为我正在运行.NET 4.5.1)


最终,
AppDomain
是在这种情况下管理各种线程和处理控制流的工具。

如果您在UI上抛出异常,调用堆栈上有一个来自
System.Windows.Forms.NativeWindow.Callback的try-catch框架,它通常是UI线程的根:

    private IntPtr Callback(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam) {

        // Note: if you change this code be sure to change the 
        // corresponding code in DebuggableCallback below!

        Message m = Message.Create(hWnd, msg, wparam, lparam);

        try {
            if (weakThisPtr.IsAlive && weakThisPtr.Target != null) {
                WndProc(ref m);
            }
            else {
                DefWndProc(ref m);
            }
        }
        catch (Exception e) {
            OnThreadException(e);
        }
        finally {
            if (msg == NativeMethods.WM_NCDESTROY) ReleaseHandle(false);
            if (msg == NativeMethods.WM_UIUNSUBCLASS) ReleaseHandle(true);
        }

        return m.Result;
    }

从那里,它调用
应用程序.ThreadException
处理程序。将安装一个默认处理程序,通知您该异常。在此之后,异常通常会被忽略,您的UI将有机会继续运行。

我意识到我可能只是自己调试了rubber duck,但我仍然会发布此消息,以防它对其他人有所帮助。这里只包含信息片段和无关的琐事,而所有需要的都在发布指南中非常清楚地列出,例如,一个最小但完整的示例。如果找不到单个异常处理程序,我想到的是有人在appdomain级别注册了未处理的异常…代码中是否有未处理的异常+=新的未处理异常venthandler?未处理的异常处理程序或异常是在线程池线程中抛出的,我们正在运行.net 4.5。是的,这是一个非常模糊的问题,但是像“在appdomain级别注册未处理的异常”这样的东西至少给了我一些我可以在google上搜索到的东西。谢谢@NDJ!我将结束这个问题,因为我无法明确回答我的问题