我是否应该始终在 Dispose 方法中断开事件处理程序的连接?

2024-03-13

我使用 C# 工作,我的工作场所有一些代码标准。其中之一是我们连接的每个事件处理程序(例如KeyDown)必须在断开Dispose方法。这有什么好的理由吗?


除非您期望事件的发布者比订阅者活得更久,否则没有理由删除事件处理程序,不是。

这是民间传说成长的主题之一。您实际上只需要以正常的方式考虑它:发布者(例如按钮)有对订阅者的引用。无论如何,发布者和订阅者是否同时有资格进行垃圾收集(这很常见),或者发布者是否有资格进行垃圾收集earlier,那么就不存在GC问题了。

静态事件会导致 GC 问题,因为它们实际上是无限寿命的发布者 - 在可能的情况下,我会完全阻止静态事件。 (我很少发现它们有用。)

另一个可能的问题是,如果您明确想要停止侦听事件,因为如果引发事件,您的对象将会行为异常(例如,它将尝试写入关闭的流)。在这种情况下,是的,您应该删除处理程序。这最有可能是在你的类实现的情况下IDisposable已经。值得实施的做法虽然不是不可能,但很不寻常IDisposable just删除事件处理程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我是否应该始终在 Dispose 方法中断开事件处理程序的连接? 的相关文章

随机推荐

  • 层顺序的输入0与期望ndim=3的层不兼容,发现ndim=2。收到完整形状:[无,1]

    我正在与 keras 合作进行文本分类 经过预处理和矢量化后 我的训练和验证数据详细信息如下 print X train shape X train ndim type X train print y train shape y train
  • 弹出菜单从操作栏中的图标展开/折叠

    我正在开发 Android 2 1 API 7 应用程序 我用以下方法实现我的操作栏操作栏夏洛克 http actionbarsherlock com 图书馆 我的操作栏视图
  • 如何验证使用 jwt.io 上的 Keycloak 身份验证提供程序创建的 HS256 签名 JWT 令牌

    我正在尝试验证使用本地运行生成的 HS256 JWT 令牌KeyCloak https www keycloak org 身份验证提供程序开启https jwt io https jwt io KeyCloack 实例正在我的本地计算机上的
  • MySQL 中查询/查看表的大小限制是多少?

    我正在使用 MySQL 目前数据库中有 3 个表 我创建了一个包含 3 个表之间关系的视图表 视图表应该有大约 200 000 行数据 因为我也在 Access 中测试了相同的查询并且它工作正常 但不幸的是我不允许使用 Access 当我在
  • [Vue 警告]:缺少必需的道具:“productInfo”

    我对 Vue 相当陌生 所以这可能是显而易见的 但我一定错过了一些东西 我不断收到错误 Vue warn Missing required prop productInfo 在我的 vue 文件中 它说它在 ProductSlider vu
  • 在 django-tastypie 中,可以在模式中显示选择吗?

    我想弄清楚我是否可以代表模型字段choices给使用 tastypie API 的客户 我有一个 django 1 4 1 应用程序 我正在为其实现 django tastypie 0 9 11 API 我有一个类似于以下内容的模型和模型资
  • 将Python脚本添加到C++项目中

    我如何将用 python 编写的脚本添加到 c 项目中 谢谢 编辑 基本上 脚本所做的只是通过电子邮件发送一些数据 我想将数据和电子邮件地址传递给用 python 编写的函数 希望这能说明问题 你可以看看Boost Python http
  • 当我在模型中加载数据库时,如何在 Codeigniter Profiler 中显示数据库查询?

    我的 Codeigniter 系统使用多个数据库 我不需要每个页面上的每个数据库 因此我在需要的模型中加载每个连接 然后在每个控制器中加载所需的模型 当我以这种方式加载内容时 探查器不会显示来自这些数据库的任何查询 这是我在模型中加载数据库
  • 可变参数模板包扩展

    In Andrei 在 GoingNative 2012 上的演讲 http channel9 msdn com Events GoingNative GoingNative 2012 Variadic Templates are Funa
  • 如何使用 gtk 信号将多个变量作为数据传递

    我有一个小程序 其中 gtk 信号回调函数需要 2 或 3 个变量 我不想创建这些全局变量 该项目的整个目标是整洁 并且我不想创建整个结构 以便我可以将小部件和编译的正则表达式发送到函数 据我所见g signal connect只允许单个数
  • 我无法在 WPF 中为自定义属性设置动画

    我已经为此苦苦挣扎了几个小时 但我找不到我做错了什么 请帮我找出我的错误 我创建了一个具有一个自定义依赖属性的用户控件 并且我想为该属性设置动画 这是我的课程 public partial class UserControl1 UserCo
  • 无法执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile)

    我知道这是一个重复的问题 但其他主题的答案对我没有帮助 我正在使用 Eclipse Photon Java 版本 10 我已在 eclipse 和 pom xml 文件中将 jdk jre 版本设置为 10 我已经更改了 eclipse i
  • Python-查找文本文件中单词列表的词频

    我正在尝试加快我的项目来计算词频 我有 360 多个文本文件 我需要获取单词总数以及另一个单词列表中每个单词出现的次数 我知道如何使用单个文本文件来做到这一点 gt gt gt import nltk gt gt gt import os
  • 同时可靠地使用核心数据

    我正在构建我的第一个 iOS 应用程序 理论上它应该非常简单 但我很难让它足够安全 让我有信心将其提交到 App Store 简而言之 主屏幕有一个表视图 在选择一行后 它会转到另一个表视图 该表视图以主从方式显示与所选行相关的信息 底层数
  • Angular - 拼接函数总是删除最后一个元素

    我有一个对象数组 我想在单击删除键时删除某些对象 但是 无论我创建了多少行 它总是从行数组中删除最后一项 即使我明确地放入这样的行 scope rows splice 1 1 它仍然会删除最后一个元素 而不是第二个元素 JS angular
  • 无法通过数字键盘使用小数(Android 上的 Xamarin Forms)

    我已经尝试了几个论坛上给出的几种解决方案 也在 Xamarin 论坛上提问 但都没有结果 我想在 Xamarin Forms 中创建一个条目 用户可以在其中添加十进制数 问题是我的数字键盘禁用了逗号 我可以使用自定义渲染器添加点 但由于我住
  • 如何在IIS中部署Angular Universal?

    我在 IIS 中部署角度通用应用程序时遇到问题 在角度通用中 创建了两个 dist 文件夹 一个是用于客户端的 dist 另一个是 dist 服务器 当我尝试托管时 我给出了 dist 文件夹的路径 站点正在运行 但页面未从服务器渲染 我遇
  • HTMLInputElement 没有方法“parent”

    我的页面上有两个非常相似的表单 我在 jquery 中进行简单的验证 以检查每个字段是否都有值 然后再使用 ajax 将数据发送到使用该数据的 php 处理程序 由于表单之间的相似性 我无法知道提交的是哪个表单 所以我想尝试通过表单容器 d
  • 将 Google-Play-Services 添加到库项目

    我正在开发一个地图库 并且正在使用 Google Play Services 到目前为止 一切都很好 问题是这样的 我将 Google Play Services 库项目包含在我的地图库中 使用 属性 gt android gt 添加库 使
  • 我是否应该始终在 Dispose 方法中断开事件处理程序的连接?

    我使用 C 工作 我的工作场所有一些代码标准 其中之一是我们连接的每个事件处理程序 例如KeyDown 必须在断开Dispose方法 这有什么好的理由吗 除非您期望事件的发布者比订阅者活得更久 否则没有理由删除事件处理程序 不是 这是民间传