Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# - Fatal编程技术网

C# catch块内部异常

C# catch块内部异常,c#,C#,可能重复: 最终将在这个场景中执行(在C#)吗 是的,总是执行finally 演示行为的一个简单示例: private void Button_Click(object sender, EventArgs e) { try { ThrowingMethod(); } catch { } } private void ThrowingMethod() { try { throw new Inval

可能重复:

最终将在这个场景中执行(在C#)吗


是的,总是执行finally

演示行为的一个简单示例:

private void Button_Click(object sender, EventArgs e)
{
    try
    {
        ThrowingMethod();
    }
    catch
    { 
    }
}

private void ThrowingMethod()
{
    try
    {
        throw new InvalidOperationException("some exception");
    }
    catch
    {
        throw;
    }
    finally
    {
        MessageBox.Show("finally");
    }
}

你可以很容易地测试出来

但您提出这个问题的事实本身就是一个很好的论据,可以将其作为嵌套在try/finally中的try/catch块来编写。眼睛容易多了

(编辑:来自合并评论的澄清-谢谢大家)
最后总是执行。我所知道的唯一例外是

  • 你拔下电源插头
  • 如果作为“后台”运行的线程由于其所属的主程序即将结束而终止,则该线程中的finally块将不会执行。看
  • 其他异步异常,如堆栈溢出和内存不足。看

大多数未执行Finally的场景都与灾难性故障有关,但后台线程1除外,因此值得特别注意。

请参阅此相关答案:“只有两个例外……”。还有其他的。例如Environment.FailFast.Thank Divo and Joe-我在那里学到了一些新东西。请参阅此副本(或链接到此处的其他副本之一):
private void Button_Click(object sender, EventArgs e)
{
    try
    {
        ThrowingMethod();
    }
    catch
    { 
    }
}

private void ThrowingMethod()
{
    try
    {
        throw new InvalidOperationException("some exception");
    }
    catch
    {
        throw;
    }
    finally
    {
        MessageBox.Show("finally");
    }
}