2010-09-23 2 views
1

Yocontrôle WPF conservé en mémoire en raison de DispatcherTimer EventHandler

Un de mon contrôle WPF est conservé en mémoire en raison d'un de ses membres privé. Le membre incriminé est un DispatcherTimer et la rétention est due au gestionnaire d'événements Tick. (Cette fuite a été détectée à l'aide de l'outil ANTS Memory Profiler)

Évidemment, je règle/enlève le manipulateur lors du chargement/déchargement. Et le contrôle est déchargé ...

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

Mais je suis coincé avec ce trouble (le même que mon contrôle est coincé dans la mémoire). Toutes les idées, THX

Répondre

0

Vous devriez jeter un coup d'œil au modèle d'événement faible. Ce n'est pas un sujet facile.

+0

Merci beaucoup CommanderZ, vous avez fait ma journée! Le pourboire était exactement ce que je cherchais. Après l'implémentation d'un DispatcherTimerWeakEvent, mon contrôle est supprimé de la mémoire.Cheers – Patrick

Questions connexes