2011-02-17 31 views
6

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?

+0

Nhiều bối cảnh xin vui lòng . Bạn muốn làm gì? –

Trả lời

3

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); 
+2

Đây sẽ là hành động một lần. OnIdle trong Windows Forms được gọi nhiều lần ... –

+0

Tôi có thể sống với điều đó. – user380719

+0

-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

6

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).

0

Đâ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(); 
    } 
Các vấn đề liên quan