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;
           
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM