2011-02-17 31 views
6

アプリケーションがアイドル状態のときに何かを実行する最良の方法は何ですか?WPFの "OnIdle"に相当するもの

DispatcherTimerを使用する必要がありますか?

またはBeginInvoke?

+0

もっと文脈でアイドル処理を行う方法ですしてください。何をしたいですか? –

答えて

3

私はこれと思います。 (例えばウィンドウまたはUserControlなど)DispatcherObjectには

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

これは1回限りのアクションです。 WindowsフォームのOnIdleは繰り返し呼び出されます... –

+0

私はそれで生きることができます。 – user380719

+0

-1 1回限りのメソッド呼び出しは、「アイドル状態の」処理を継続する手段ではありません。 – MickyD

6

あなたは(あなたの目標に応じて)DispatcherPriority.ApplicationIdleまたはDispatcherPriority.SystemIdleのいずれかにDispatcherPriorityセットでDispatcherTimerを使用する必要があります。

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(); 
    }