WPF 应用不活动

WPF app inactivity

我希望我的应用程序在空闲时执行某些操作。为此,我编写了这段代码,它仅在 DispatcherTimer 间隔小于 30 秒或我的应用未处于活动状态时才能正常工作 window.

    static DispatcherTimer mIdle;
    public static void HandleWithTimeout(int timeout, Action handler)
    {            
        InputManager.Current.PreProcessInput += delegate(object sender, PreProcessInputEventArgs args)
        {
            mIdle.IsEnabled = false;
            mIdle.IsEnabled = true;
        };
        mIdle = new DispatcherTimer
        {
            Interval = TimeSpan.FromSeconds(timeout),
            IsEnabled = true
        };
        mIdle.Tick += delegate { handler(); };
    }

那么在应用程序处于活动状态的情况下我如何才能使它工作window,为什么当超时 >=30 秒时它不能正常工作?

我找到了答案:相反

InputManager.Current.PreProcessInput += delegate(object sender, PreProcessInputEventArgs args)
    {
        mIdle.IsEnabled = false;
        mIdle.IsEnabled = true;
    };

我写了

InputManager.Current.PreNotifyInput += delegate
        {
            mIdle.IsEnabled = false;
            mIdle.IsEnabled = true;
        };

以下是 PreProcessInputPreNotifyInput 和其他 InputManager evnet 之间的区别: https://msdn.microsoft.com/en-us/library/system.windows.input.inputmanager(v=vs.110).aspx