使用委托的新实例取消注册事件

2023-12-31

EventHandler a = new EventHandler(control_RegionChanged);
EventHandler b = new EventHandler(control_RegionChanged);

 if (a == b)
 {
     Console.WriteLine("Same!");
 }
 else
 {
     Console.WriteLine(a.GetHashCode() + " " + b.GetHashCode());
 }

这写Same!到控制台。

control.RegionChanged += new EventHandler(control_RegionChanged);
control.RegionChanged -= new EventHandler(control_RegionChanged);

这段代码执行后,是EventHandler未注册?


是的;代表在实例上进行比较MethodInfo;如果它们是相同的,那么它就会起作用。当尝试取消订阅匿名方法时就会出现问题;在这种情况下,您必须保留对委托的引用才能取消订阅。

So:

这可以:

control.SomeEvent += obj.SomeMethod;
//...
control.SomeEvent -= obj.SomeMethod;

但这风险更大:

control.SomeEvent += delegate {Trace.WriteLine("Foo");};
//...
control.SomeEvent -= delegate {Trace.WriteLine("Foo");};

使用匿名方法的正确过程是:

EventHandler handler = delegate {Trace.WriteLine("Foo");};
control.SomeEvent += handler;
//...
control.SomeEvent -= handler;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用委托的新实例取消注册事件 的相关文章

  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • ClickOnce 应用程序错误:部署和应用程序没有匹配的安全区域

    我在 IE 中使用 FireFox 和 Chrome 的 ClickOnce 应用程序时遇到问题 它工作正常 异常的详细信息是 PLATFORM VERSION INFO Windows 6 1 7600 0 Win32NT Common
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 如何设置 log4net 每天将我的文件记录到不同的文件夹中?

    我想将每天的所有日志保存在名为 YYYYMMdd 的文件夹中 log4net 应该根据系统日期时间处理创建新文件夹 我如何设置它 我想将一天中的所有日志保存到 n 个 1MB 的文件中 我不想重写旧文件 但想真正拥有一天中的所有日志 我该如
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 将四元数从右手坐标翻转到左手坐标

    我需要从右边翻转四元数 x left to right y front to back z top to bottom 到左手坐标 其中 x left to right y top to bottom z front to back 我该怎
  • unordered_set 将元素存储为指针

    缩小范围 我目前正在使用升压无序 http www boost org doc libs 1 49 0 doc html unordered html 我看到两种可能的解决方案 定义我自己的等式谓词和哈希函数 http www boost
  • VS2010不会显示项目属性(“底层RCW”)?

    只有有时 我还没有注意到模式 当我右键单击一个项目 各种类型的项目 并选择 特性 我通常可以在重新启动 VS2010 后查看项目页面 我用的是RTM版本 什么可能导致此错误 莱帕德英国 我遇到了同样的问题 最后发现出了什么问题 这是行为不当
  • 传单标记在某些情况下不显示

    我正在使用 leaflet htmlwidget 实现来使用 R 绘制基于 Web 的地图 我正在寻找特定的标记 但找不到它 并意识到它根本没有显示 但是 当我将数据集子集化为just该条目 标记显示得很漂亮 这是标记的屏幕截图 在将数据子
  • EF 映射为表中的所有列名称添加前缀

    我有一个大型现有数据库 它有一个约定 其中所有列名称都以非复数表名作为前缀 例如 Tablename addresses Columns addressId addressLine1 addressLine2 是否有任何配置可以申请映射 使
  • CMake 安装目标依赖项

    我正在编写一个包含库本身和示例的库 并且我正在使用 CMake cmake minimum required VERSION 3 6 add executable example main cpp install DIRECTORY inc
  • 断开连接时 Firebase 更新

    我在 firebase 上有一个节点 列出了游戏中的所有玩家 当新玩家加入时 此列表将更新 当当前用户 我 断开连接时 我想将自己从列表中删除 由于列表会随着时间的推移而变化 在我断开连接的那一刻 我想更新此列表并更新 firebase 这
  • javascript var 和 not var 有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 JavaScript 中使用 var 和不使用 var 的区别 https stackoverflow com questions 1470488 difference between using v
  • 如果在离线状态下加载/刷新页面,JavaScript 后台同步将停止工作

    我目前正在学习如何使用后台同步来允许用户在离线使用网络应用程序时进行 PUT POST 更改 我按照杰克 阿奇博尔德 Jake Archibald 的指示进行操作后台同步简介 https developers google com web
  • 如何在 Asyncstorage 中设置多个值

    如何在 Asyncstorge 中设置多个值 因为我正在尝试设置token and user id 这些是服务器响应值 这就是响应的样子 json error 0 data User registered Successfully user
  • NSArray 基于密钥的 Tokenize

    我已经从服务器获取了数据并且传递的数据也填充了NSMutableArray after NSJSONSerialization 数组输出如下 NSArray jsonArray NSArray json NSLog Array jsonAr
  • 是否可以检测文件是否实际下载

    假设我有一个返回的控制器操作方法FileResult 是否可以检测文件是否被实际下载的完全交给客户 public ActionResult GetFile int id DownloadInfo data provider GetInfo
  • CUDA 中的块间同步

    我为这个问题搜索了一个月 我无法同步 CUDA 中的块 我读过很多关于atomicAdd 合作组等的文章 我决定使用一个全局数组 这样一个块就可以在全局数组的一个元素上写入 写入之后 块的线程将等待 即陷入 while 循环 直到所有块都写
  • 获取 Windows 窗体的大小

    我正在创建一个 Windows 窗体应用程序 如何捕获 Windows 窗体的大小 目前我的代码中有一些看起来像这样的东西 PictureBox display new PictureBox display Width 360 displa
  • 如何将 Json.NET 中缺失的属性反序列化为默认值?

    我有一个用 DataContract 和 DataMember 属性注释的类 部分成员被标记为DataMember IsRequired true 当我通过 Json NET 线路序列化实例时 所需的对象成员具有 null 值 那么它们的序
  • 请解释一下这个 Javascript 闭包练习 [重复]

    这个问题在这里已经有答案了 我是一个 javascript 菜鸟 试图理解下面的闭包练习 现在 我知道结果是 122 任何人都可以引导我一步步完成这个过程 什么被传递到什么 以便我能够理解闭包是如何工作的 var hidden myster
  • Android TTS 文本长度超过 4k 字符无法播放

    我在用TextToSpeech有时会播放一些长文本 我注意到从那以后Android 4 1 2如果文本长度超过 4000 个字符 则不会播放 我没有收到任何错误 但文本不会播放 直到现在我才能够重现这个Android 4 1 2 三星 Ga
  • maven - 当单元测试花费太长时间时构建失败

    我的项目中有很多用 JUnit 和 TestNG 编写的单元测试 构建过程基于带有surefire插件的maven 当至少一个单元测试花费太多秒时 是否有任何方法 插件使 Maven 构建失败 我知道有一些插件在 TeamCity Jenk
  • 在 Python 代码中参数化 MySQL IN 子句

    我正在看这个类似的问题 参数化 SQL IN 子句 https stackoverflow com questions 337704 parameterize an sql in clause但解决方案不是使用Python 所以我不得不提出
  • 使用委托的新实例取消注册事件

    EventHandler a new EventHandler control RegionChanged EventHandler b new EventHandler control RegionChanged if a b Conso