Inatividade e atividade do WPF
Estou tentando lidar com a inatividade e a atividade do usuário em um aplicativo WPF para desvanecer algumas coisas. Depois de muita pesquisa, decidi seguir a (pelo menos na minha opinião) solução muito elegante que Hans Passant postouaqui.
Há apenas uma desvantagem: enquanto o cursor permanecer em cima da janela, oPreProcessInput
evento é continuamente disparado. Estou tendo um aplicativo de tela cheia, então isso o mata. Qualquer idéia de como eu posso contornar esse comportamento seria muito 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();
}
}
Atualizar
Eu poderia restringir melhor o comportamento descrito (consulte orectangle1.Visibility
atualização no código acima). Enquanto o cursor estiver sobre a janela e, por exemplo, oVisibility
de um controle é alterado, oPreProcessInput
é criado. Talvez eu esteja entendendo mal o propósito doPreProcessInput
evento e quando é acionado. O MSDN não foi muito útil aqui.