zoukankan      html  css  js  c++  java
  • C#中窗口关闭时没有取消事件订阅导致事件重复执行的解决方法

    场景

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

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

    参考上面的博客。

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

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

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

    注:

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

    实现

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

    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;
               
            }
  • 相关阅读:
    fork 函数 和vfork 函数的区别
    进程时间
    输出子进程状态
    二维字符串数组字典排序
    括号匹配
    队列实现二叉树层序遍历
    二叉查找树
    分块查找
    JS中的className含义
    Java打印温度转换表
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/11692269.html
Copyright © 2011-2022 走看看