C#中窗口关闭时没有取消事件订阅导致事件重复执行的解决方法
程序员文章站
2023-04-04 17:22:46
场景 C#中委托与事件的使用-以Winform中跨窗体传值为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100150700 参考上面的博客。 现在是在主页面点击按钮时弹出窗体,在窗体的load事件中进行事件的订阅,然后关闭 ......
场景
c#中委托与事件的使用-以winform中跨窗体传值为例:
https://blog.csdn.net/badao_liumang_qizhi/article/details/100150700
参考上面的博客。
现在是在主页面点击按钮时弹出窗体,在窗体的load事件中进行事件的订阅,然后关闭窗体,再次打开时执行触发事件后,
订阅的事件就会执行两次,依次类推。
这是因为在窗体关闭的时候没有将原来的事件订阅解除掉。
注:
博客主页:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
点击主窗体按钮窗体显示。
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; }