Я реализую решение в классе IdleDetector. Я немного улучшил код. Детектор простоя выбрасывает IsIdle, который может быть перехвачен! Это дает это! Я жду некоторых комментариев.
аюсь справиться с бездействием и активностью пользователя в приложении 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 здесь не очень помог.