Что является эквивалентом «OnIdle» в WPF - PullRequest
7 голосов
/ 17 февраля 2011

Каков наилучший способ выполнения чего-либо, когда приложение бездействует?

Должен ли я использовать DispatcherTimer?

Или BeginInvoke?

Ответы [ 4 ]

6 голосов
/ 17 февраля 2011

Вы должны использовать DispatcherTimer с DispatcherPriority , установленным на DispatcherPriority.ApplicationIdle или DispatcherPriority.SystemIdle (в зависимости от ваших целей).

3 голосов
/ 17 февраля 2011

Я думаю, что это будет так.

В DispatcherObject (например, Window или UserControl):

this.Dispatcher.BeginInvoke(new Action(() => SomeMethod()), DispatcherPriority.ApplicationIdle);
2 голосов
/ 27 мая 2013

Я думаю, что использование Dispatcher.Hooks.DispatcherInactive должно быть ближайшим эквивалентом события OnIdle:

Событие DispatcherHooks.DispatcherInactive

0 голосов
/ 29 августа 2013

Вот так я делаю простую обработку в XAML

    DispatcherTimer timerIdle;
    private void OnLoaded(object sender, RoutedEventArgs e)
    {
        //Create our idle timer.
        timerIdle = new DispatcherTimer
            (
            TimeSpan.FromMinutes(1),
            DispatcherPriority.ApplicationIdle,
            (s, b) => {
                timerIdle.Stop();
                *************SOME FUNCTION HERE*****************
            },
            Application.Current.Dispatcher
            );

        //Start the timer here
        timerIdle.Start();
    }

    private void OnMouseMove(object sender, MouseEventArgs e)
    {
       if(!timerIdle.IsEnabled)
          timerIdle.Start();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...