アプリケーションがアイドル状態のときに何かを実行する最良の方法は何ですか?WPFの "OnIdle"に相当するもの
DispatcherTimerを使用する必要がありますか?
またはBeginInvoke?
アプリケーションがアイドル状態のときに何かを実行する最良の方法は何ですか?WPFの "OnIdle"に相当するもの
DispatcherTimerを使用する必要がありますか?
またはBeginInvoke?
私はこれと思います。 (例えばウィンドウまたはUserControlなど)DispatcherObjectには
:
this.Dispatcher.BeginInvoke(new Action(() => SomeMethod()), DispatcherPriority.ApplicationIdle);
これは1回限りのアクションです。 WindowsフォームのOnIdleは繰り返し呼び出されます... –
私はそれで生きることができます。 – user380719
-1 1回限りのメソッド呼び出しは、「アイドル状態の」処理を継続する手段ではありません。 – MickyD
あなたは(あなたの目標に応じて)DispatcherPriority.ApplicationIdle
またはDispatcherPriority.SystemIdle
のいずれかにDispatcherPriorityセットでDispatcherTimerを使用する必要があります。
私はDispatcher.Hooks.DispatcherInactiveの使用がONIDLEイベントに最も近い同等であるべきだと思う:
これは私が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();
}
もっと文脈でアイドル処理を行う方法ですしてください。何をしたいですか? –