C#中窗口关闭时没有取消事件订阅致使事件重复执行的解决方法

场景

C#中委托与事件的使用-以Winform中跨窗体传值为例:编程

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100150700spa

参考上面的博客。.net

如今是在主页面点击按钮时弹出窗体,在窗体的load事件中进行事件的订阅,而后关闭窗体,再次打开时执行触发事件后,code

订阅的事件就会执行两次,依次类推。orm

这是由于在窗体关闭的时候没有将原来的事件订阅解除掉。blog

注:教程

博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。事件

实现

点击主窗体按钮窗体显示。get

FrmCurveCompare curveCompare = new FrmCurveCompare(); curveCompare.StartPosition = FormStartPosition.CenterScreen; //显示Dialog
curveCompare.ShowDialog();

 

而后在窗体的load事件中博客

private void FrmCurveCompare_Load(object sender, EventArgs e) { Common.ChartCompare.ChartCompareHelper.OnReloadSelectData += DataTreeListHelper_OnReloadSelectData; }

 

解决方案在窗体的关闭事件中解除订阅。

首先在属性中找到窗体关闭事件

 

 

添加以下代码:

private void FrmCurveCompare_FormClosing(object sender, FormClosingEventArgs e) { Common.ChartCompare.ChartCompareHelper.OnReloadSelectData -= DataTreeListHelper_OnReloadSelectData; }
相关文章
相关标签/搜索