Элемент управления WPF сохраняется в памяти из-за DispatcherTimer EventHandler - PullRequest
1 голос
/ 23 сентября 2010

Yo

Один из моих элементов управления 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

1 Ответ

0 голосов
/ 23 сентября 2010

Вы должны взглянуть на слабый паттерн событий.Это не совсем простая тема.

...