Я пытаюсь обрабатывать бездействие и активность пользователя в приложении WPF, чтобы угаснуть некоторые вещи. После многих исследований я решил пойти с (по крайней мере, на мой взгляд) очень элегантным решением, которое Ханс Пассант опубликовал здесь.
Есть только один недостаток: пока курсор остается в верхней части окна, событие PreProcessInput
непрерывно запускается. У меня полноэкранное приложение, так что это убивает его. Любые идеи о том, как я могу обойти это поведение, будут наиболее ценными.
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();
}
}
Обновление
Я мог бы сузить описанное поведение лучше (см. обновление rectangle1.Visibility
в приведенном выше коде). Пока курсор лежит поверх окна и, например, изменяется Visibility
элемента управления, появляется PreProcessInput
. Возможно, я не понимаю цель события PreProcessInput
и когда он срабатывает. MSDN здесь не очень помог.