Próbuję radzić sobie z brakiem aktywności użytkownika i działaniem w aplikacji WPF, aby zanikać niektóre rzeczy. Po wielu badaniach zdecydowałem się pójść z (przynajmniej moim zdaniem) bardzo eleganckim rozwiązaniem Hans Passant opublikowanym here.Bezczynność i aktywność WPF
Jest tylko jeden minus: tak długo, jak kursor pozostaje na górze okna, wydarzenie PreProcessInput
jest stale wyzwalane. Mam aplikację pełnoekranową, więc to zabija. Wszelkie pomysły na obejście tego zachowania będą najbardziej doceniane.
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();
}
}
Aktualizacja
mogę zawęzić opisanego zachowania lepsze (patrz aktualizację w powyższym kodzie rectangle1.Visibility
). Dopóki kursor spoczywa na górnej części okna i na przykład zmieniono kontrolkę Visibility
, podnosi się PreProcessInput
. Być może nie rozumiem celu zdarzenia PreProcessInput
i kiedy jest on uruchamiany. MSDN nie był tu zbyt pomocny.
Ten kod działa doskonale dla mnie i 'PreProcessInput' nie jest wywoływany, gdy mysz nadal znajduje się nad' Oknem'. Czy masz taki sam efekt, jeśli utworzysz małą aplikację z samym kodem, który opublikowałeś? Którą wersję .NET używasz? –
@Meleak: Dzięki!Rzeczywiście działa tylko z powyższym kodem (wstyd mi). W każdym razie w moim projekcie wciąż mam dziwne zachowanie. Zbieram je i zawężam bardziej i dostarczę bardziej szczegółowych informacji. Dla kompletności używam .NET 4. –
@Meleak: Zaktualizowałem pytanie tak, aby zachowanie było rzeczywiście zrozumiałe. –