2010-09-23 37 views
1

WPF控制保留在存储器中,由于DispatcherTimer事件处理程序

我的一个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

回答

0

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

+0

非常感谢CommanderZ,你让我的一天!小费正是我正在寻找的东西。在执行DispatcherTimerWeakEvent后,我的控件从memory.Cheers中移除 – Patrick 2010-09-23 11:52:56