什么是WPF中的“OnIdle”

时间:2011-02-17 00:26:07

标签: wpf

当应用程序空闲时执行某些操作的最佳方法是什么?

我应该使用DispatcherTimer吗?

或者BeginInvoke?

4 个答案:

答案 0 :(得分:6)

您应该DispatcherTimer使用DispatcherPriority设置为DispatcherPriority.ApplicationIdleDispatcherPriority.SystemIdle(取决于您的目标)。

答案 1 :(得分:3)

我认为就是这样。

在DispatcherObject(例如Window或UserControl)中:

this.Dispatcher.BeginInvoke(new Action(() => SomeMethod()), DispatcherPriority.ApplicationIdle);

答案 2 :(得分:2)

我认为Dispatcher.Hooks.DispatcherInactive的使用应该是与OnIdle事件最接近的等价物:

DispatcherHooks.DispatcherInactive Event

答案 3 :(得分:0)

这就是我在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();
    }