Estoy tratando de manejar la inactividad y la actividad del usuario en una aplicación WPF para atenuar algunas cosas dentro y fuera. Después de mucha investigación, decidí ir con (al menos en mi opinión) una solución muy elegante. Hans Passant publicó here.WPF inactividad y actividad
Solo hay un inconveniente: mientras el cursor permanezca en la parte superior de la ventana, el evento PreProcessInput
se dispara continuamente. Tengo una aplicación de pantalla completa, así que esto lo mata. Cualquier idea sobre cómo puedo evitar este comportamiento sería muy apreciada.
public partial class MainWindow : Window
{
readonly DispatcherTimer activityTimer;
public MainWindow()
{
InitializeComponent();
InputManager.Current.PreProcessInput += Activity;
activityTimer = new DispatcherTimer
{
Interval = TimeSpan.FromSeconds(10),
IsEnabled = true
};
activityTimer.Tick += Inactivity;
}
void Inactivity(object sender, EventArgs e)
{
rectangle1.Visibility = Visibility.Hidden; // Update
// Console.WriteLine("INACTIVE " + DateTime.Now.Ticks);
}
void Activity(object sender, PreProcessInputEventArgs e)
{
rectangle1.Visibility = Visibility.Visible; // Update
// Console.WriteLine("ACTIVE " + DateTime.Now.Ticks);
activityTimer.Stop();
activityTimer.Start();
}
}
actualización
pude reducir el comportamiento descrito mejor (véase la actualización rectangle1.Visibility
en el código anterior). Siempre que el cursor descanse en la parte superior de la ventana y, por ejemplo, se cambie Visibility
de un control, se levantará PreProcessInput
. Tal vez estoy malinterpretando el propósito del evento PreProcessInput
y cuando se dispara. MSDN no fue muy útil aquí.
Ese código funciona muy bien para mí y 'PreProcessInput' no aparece cuando el mouse aún está sobre la' Ventana'. ¿Obtiene el mismo efecto si crea una aplicación pequeña solo con el código que publicó? ¿Qué versión de .NET estás usando? –
@Meleak: ¡Gracias!De hecho, funciona solo con el código anterior (lástima de mí). De todos modos, en mi proyecto todavía tengo ese comportamiento extraño. Estoy investigando y reduciendo esto más y proporcionaré información más detallada. Para completar, estoy usando .NET 4. –
@Meleak: He actualizado la pregunta para que el comportamiento sea realmente comprensible. –