簡體   English   中英

wpf userControl 的子控件的取消訂閱事件

[英]wpf userControl's child controls' unsubscribe events

我希望有一個通用(擴展)方法,它接受父控件並遍歷其所有子控件並取消訂閱它們的事件(如果有)。

問題當我創建一些基於 wpf 的表單時,我正在密切關注內存消耗,考慮到 ui 元素及其事件的數量,內存峰值是預期的,但是當表單關閉時,我希望內存像在 wpf 中一樣得到釋放,我假設表單被自動處理一旦關閉就被處理掉,所以 GC 應該清理並釋放內存......但這就是我等了幾分鍾並在診斷工具中查看私有內存使用情況時沒有發生的事情,這仍然是一樣的。 所以我想知道它沒有完全處理/取消訂閱事件等

我無法確定訂閱的事件是否會對性能產生負面影響,但我當然可以回答您的另外兩個問題:

  1. 您可以使用以下擴展來枚舉所有子項:

     public static IEnumerable<T> GetVisualChildren<T>(this DependencyObject Parent) where T : DependencyObject { if (Parent != null) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(Parent); i++) { var Child = VisualTreeHelper.GetChild(Parent, i); if (Child != null && Child is T) yield return (T)Child; foreach (var ChildOfChild in GetVisualChildren<T>(Child)) yield return ChildOfChild; } } } foreach (myControlInstance.GetVisualChildren<DependencyObject>()) { //Unsubscribe events }
  2. 要取消訂閱對象的所有事件,請參閱這篇 SO 文章:

如何取消訂閱 C# 中特定類的事件的所有處理程序?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM