一旦确定将要捕获的异常不被捕获,如何告诉.NET不要终止它?

时间:2014-04-04 18:51:40

标签: c# .net

有些情况下,当.NET框架确定catch块抛出的异常不会被代码中的任何地方捕获时,控件不会通过try-catch-finally语句的finally块传递

是否可以配置此行为,如果是,如何配置?

(在你告诉我控制总是通过finally块之前,请随时进行以下实验并报告你的观察结果。)

  1. 在VS中,创建一个控制台应用程序项目
  2. 在控制台应用程序的Main()方法中放置一个try-catch-finally语句
  3. 在finally块或地址断点中写入一些代码或任何允许您判断控制是否通过finally块传递的代码。
  4. 让try块抛出异常
  5. 让catch块捕获异常
  6. 让catch块重新抛出异常
  7. 如果您计算机上安装的VS / .NET版本与我的版本相同,则控件不会通过finally块。

3 个答案:

答案 0 :(得分:2)

当我重新抛出异常时,按预期工作,代码:

class Program
 {
    static void Main(string[] args)
    {
        System.Console.WriteLine("Start");
        try
        {
            System.Console.WriteLine("Try");
            throw new Exception("ttt");
        }
        catch (System.Exception ex)
        {
            System.Console.WriteLine("Catch");
            throw;
        }
        finally
        {
            System.Console.WriteLine("Finally");
        }
    }
}

这是我的代码输出:

Start
Try
Catch

Unhandled Exception: System.Exception: ttt
at ConsoleApplication1.Program.Main(String[] args) in C:\Users\mckeownto01\Documents\Visual Studio    2010\Projects\MvcApplication1\ConsoleApplication1\Program.cs:line 21
Finally

答案 1 :(得分:0)

如果你有一个WinForms应用,请在Application.Run(new Form1());例程中Main之前添加这些行。

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ThreadException += Application_ThreadException;

并将此方法添加到Program类:

static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
    //TODO: Handle the error here.
}

答案 2 :(得分:0)

我认为观察到的行为与VS调试器的配置方式有关。