¿Cuál es la mejor manera de realizar algo cuando una aplicación está inactiva?¿Cuál es el equivalente a "OnIdle" en WPF
¿Debo usar DispatcherTimer?
¿O BeginInvoke?
¿Cuál es la mejor manera de realizar algo cuando una aplicación está inactiva?¿Cuál es el equivalente a "OnIdle" en WPF
¿Debo usar DispatcherTimer?
¿O BeginInvoke?
Creo que sería esto.
En un DispatcherObject (como una ventana o un control de usuario):
this.Dispatcher.BeginInvoke(new Action(() => SomeMethod()), DispatcherPriority.ApplicationIdle);
Esta será una acción de una sola vez. OnIdle en Windows Forms se llama repetidamente ... –
Puedo vivir con eso. – user380719
-1 La invocación de método único no es un medio continuo para procesar "en reposo" – MickyD
Debe utilizar un DispatcherTimer con un conjunto DispatcherPriority a cualquiera DispatcherPriority.ApplicationIdle
o DispatcherPriority.SystemIdle
(dependiendo de sus objetivos).
creo que el uso de Dispatcher.Hooks.DispatcherInactive debe ser el equivalente más cercano al evento OnIdle:
Ésta es la forma en que hago procesamiento inactivo en 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();
}
Más contexto favor . ¿Qué quieres hacer? –