IDisposable.Dispose 在 using 块中发生异常后永远不会被调用

2023-12-01

我从很多来源了解到this and thisDispose的方法IDisposable如果在 a 中抛出异常,则始终会被调用Using堵塞。那么我有这个代码:

static class MainEntryPoint
{
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException;

        using (var x = new Disposable())
        {
            throw new Exception("asdfsdf");
        }
    }

    private static void HandleUnhandledException(Object sender, System.UnhandledExceptionEventArgs e)
    {
        Environment.Exit(0);
    }
}

class Disposable : IDisposable
{
    public void Dispose()
    {
        System.Diagnostics.Debug.Print("I am disposed");
    }
}

当抛出未处理的异常时,它退出应用程序。这Dispose方法从未被调用。为什么?


环境.退出将终止程序

如果从 try 或 catch 块中调用 Exit,则任何 finally 中的代码 块不执行。如果使用return语句,则代码中 finally 块确实执行。

using (var x = new Disposable())
{
    throw new Exception("asdfsdf");
}

将被转换为

Disposable x = new Disposable();
try
{
    throw new Exception("asdfsdf");
}
finally
{
    if (x != null)
        x.Dispose();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IDisposable.Dispose 在 using 块中发生异常后永远不会被调用 的相关文章

随机推荐

  • 使用 AVFoundation 框架 iPhone 进行视频录制?

    我正在借助示例代码开发一个应用程序2010 年全球开发者大会AVCamDemo 示例 在应用程序中 我需要从 iPhone 的前置摄像头录制视频 但由于我的地方没有新的 iPhone 4 我无法正确测试代码 如果有人能给我提示 无论我是否朝
  • 我在 pyqt5 程序中使用 QDoubleValidator 但它似乎不起作用

    我创建了一个 QWidget 对象 其中有一些 lineEdit 并且我打算向它们添加一些约束 因此我实现了 QDoubleValidator 对象 以下是我的代码中的相关部分 self lineEdit taxRate QLineEdit
  • Python 和 Selenium - 离开页面时禁用警报

    Using Python 3 and Chrome驱动程序 假设一个自动化的 Python 程序正在网上冲浪 从不同的来源获取内容 假设这些网站中的任何一个触发了 您确定要离开此页面吗 alert 关键词 any 以随机方式 这些网站 Qu
  • 结构化数据(微观数据)和嵌入项目

    我想使用 Microdata 和 Schema org 来定义我的网页的主要内容 所以我做了这样的事情 div div div div
  • 将字符串从 C# 编组到 C++

    我是微软世界的新人 我在尝试将简单的字符串从 c 传递到 dll c 时遇到很多问题 我读过很多帖子和文档 但问题是一样的 C code extern C declspec dllexport int Init long l char ur
  • 宏中的 # 和 ##

    include
  • 如何更改 UITableView Swift 3 中的分隔符高度?

    尽管关于这个主题已经有一些答案 它们都没有涵盖 Swift 3 而且它们都是很久以前的了 当前在 Swift 3 中更改 UITableView 中分隔符高度的最佳方法是什么 更新为 Swift 3 如果您想更改 UITableView 分
  • 如何在链接悬停时隐藏浏览器左下角的 url

    当我将光标悬停在链接上时 我想隐藏显示的网址 我只想在我的浏览器上这样做 网上有很多关于此的问题 但我没有找到任何可行的解决方案 我正在寻找适用于 Chrome 或 Firefox 的解决方案 为什么我需要这样做 我很快就会展示一个网站演示
  • jQuery 如果在页面上找到此图像,请添加此元标记?

    我正在尝试将丰富的片段添加到显示星星的动态图像中 我的购物车写的唯一内容就是这个图像 所以我必须找到正在显示的图像 然后添加正确的元标记 因此 如果显示的图像是 1stars gif 我必须写 如果显示的图像是 5stars gif 我必须
  • 如何按列删除所有具有“NA”值的单元格

    这个问题不是重复的 因为我的data frame 没有相同数量的NA values在所有列中 因此该问题中提到的解决方案不起作用 我有一个data frame与很多NA值 我想删除所有具有 NA 值的单元格 重要 不是行或列 单元格 原来的
  • 如何将 URI 传递给意图?

    我正在尝试将 URI 对象传递给我的 Intent 以便使用该 URI 在另一项活动中 如何传递 URI private Uri imageUri Intent intent new Intent this GoogleActivity c
  • GPS计算Windows Phone 7上两点之间的距离

    我正在使用 GPS 来计算两点之间的距离 即我使用 Windows Phone 作为卷尺 但当我开始时 我实际上没有得到正确的值 即使我站着不动 它也给了我数百米 这是我的代码 myWatcher StatusChanged new Eve
  • 响应多个KeyDown事件

    我正在制作一个简单的 WinForm 赛车游戏 我有两个对象 汽车 当按下按键时它们在表单上移动 Form1KeyDown Event 唯一的问题是 当一个玩家按下一个键时 另一个玩家无法按下他的键 什么也不会发生 但是当第一个玩家释放钥匙
  • 嵌套的 RecyclerView 不滚动

    我在另一个回收器视图中添加回收器视图时遇到问题 子回收器位于 CardView 内 而 CardView 位于父回收器视图内 我尝试了互联网上的所有解决方案 但没有用 我希望子回收器视图垂直滚动 而父回收器视图也垂直滚动 父级回收者视图
  • 在 PL/SQL 过程中,将查询或引用游标包装在 HTML 表中

    如果您使用 SQL Plus 来使用 这似乎很容易 SQL gt set markup html on 并在 SQL Plus 窗口中获得一些可爱的结果 我们有一个预言机工作 需要通宵运行 并向许多人发送结果电子邮件 我想将 sql 语句包
  • 替换模板文件中的 bash 变量

    我正在尝试使用 Bash 来运行某种形式的安装过程 在此过程中 将复制配置文件并替换其中的某些值 这样的配置可以在下面找到 server listen 80 root INSTALLPATH server name SITEURL clie
  • 如何检测用户是否点击了“后退”按钮

    当用户返回history back 1时 我如何检测到这一点 然后 警告 用户点击了返回 使用绑定 最好是 jQuery 您通常不能 浏览器安全限制 您可以判断用户是否离开页面 onbeforeunload onunload 触发 但您无法
  • Selenium RC 中的 XPath 或 CSS 与 Java 不起作用

    我正在尝试使用 selenium RC 自动执行以下场景 打开Goog le主页并在搜索框中输入 软件 然后单击搜索按钮 单击 Google 搜索检索到的多个链接中的第一个链接 由于我看不到这些链接的 name 或 id 属性 并且该链接的
  • 如何在ASP.NET Core 1.0 RC2项目中使用PCL

    我想使用带有目标的简单 POCO 仅无其他依赖项 PCL Xamarin Android 通用Windows 10 ASP NET 核心 1 0 在 ASP NET Core 1 0 RC2 项目中 全部在同一解决方案中 我已将此导入添加到
  • IDisposable.Dispose 在 using 块中发生异常后永远不会被调用

    我从很多来源了解到this and this那Dispose的方法IDisposable如果在 a 中抛出异常 则始终会被调用Using堵塞 那么我有这个代码 static class MainEntryPoint static void