当应用程序空闲时执行某些操作的最佳方法是什么?
我应该使用DispatcherTimer吗?
或者BeginInvoke?
答案 0 :(得分:6)
您应该DispatcherTimer使用DispatcherPriority设置为DispatcherPriority.ApplicationIdle
或DispatcherPriority.SystemIdle
(取决于您的目标)。
答案 1 :(得分:3)
我认为就是这样。
在DispatcherObject(例如Window或UserControl)中:
this.Dispatcher.BeginInvoke(new Action(() => SomeMethod()), DispatcherPriority.ApplicationIdle);
答案 2 :(得分:2)
我认为Dispatcher.Hooks.DispatcherInactive的使用应该是与OnIdle事件最接近的等价物:
答案 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();
}