由于DispatcherTimer EventHandler,WPF控件保留在内存中

时间:2010-09-23 08:01:49

标签: wpf memory-leaks dispatchertimer

由于其私有成员之一,我的一个WPF控件保留在内存中。 incriminate成员是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

1 个答案:

答案 0 :(得分:0)

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