1

由于其中一个私有成员,我的 WPF 控件之一保留在内存中。有罪的成员是 DispatcherTimer,保留是因为 Tick 事件处理程序。(此泄漏是在工具 ANTS Memory Profiler 的帮助下检测到的)

显然,我在加载/卸载时设置/删除处理程序。并且控件已卸载...

void TransportControl_Loaded(object sender, RoutedEventArgs e)
{
  if (m_playheadTimer == null)
  {
    m_playheadTimer = new System.Windows.Threading.DispatcherTimer();
    m_playheadTimer.Tick += PlayheadTimer_Tick;
    m_playheadTimer.Interval = TimeSpan.FromMilliseconds(50);
  }
}

void TransportControl_Unloaded(object sender, RoutedEventArgs e)
{
  if (m_playheadTimer != null)
  {
    if (m_playheadTimer.IsEnabled)
      m_playheadTimer.Stop();

    m_playheadTimer.Tick -= PlayheadTimer_Tick;
  }
}

但是我仍然遇到了这个麻烦(就像我的控制卡在内存中一样)。任何想法,THX

4

1 回答 1

0

你应该看看弱事件模式。不过,这不是一个简单的话题。

于 2010-09-23T08:15:58.177 回答