Cách tốt nhất để thực hiện điều gì đó khi một ứng dụng không hoạt động là gì?Tương đương với "OnIdle" trong WPF
Tôi có nên sử dụng DispatcherTimer không?
Hoặc BeginInvoke?
Cách tốt nhất để thực hiện điều gì đó khi một ứng dụng không hoạt động là gì?Tương đương với "OnIdle" trong WPF
Tôi có nên sử dụng DispatcherTimer không?
Hoặc BeginInvoke?
Tôi nghĩ nó sẽ như thế này.
Trong một DispatcherObject (chẳng hạn như một cửa sổ hoặc UserControl):
this.Dispatcher.BeginInvoke(new Action(() => SomeMethod()), DispatcherPriority.ApplicationIdle);
Đây sẽ là hành động một lần. OnIdle trong Windows Forms được gọi nhiều lần ... –
Tôi có thể sống với điều đó. – user380719
-1 Gọi phương thức một lần không phải là phương tiện liên tục để xử lý "không hoạt động" – MickyD
Bạn nên sử dụng một DispatcherTimer với một bộ DispatcherPriority hoặc là DispatcherPriority.ApplicationIdle
hoặc DispatcherPriority.SystemIdle
(tùy thuộc vào mục tiêu của mình).
Tôi nghĩ rằng việc sử dụng các Dispatcher.Hooks.DispatcherInactive nên là tương đương gần nhất với sự kiện OnIdle:
Đây là cách tôi làm chế biến nhàn rỗi trong 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();
}
Nhiều bối cảnh xin vui lòng . Bạn muốn làm gì? –