WPF应用程序不活动

时间:2016-03-07 08:26:13

标签: c# wpf dispatchertimer

我希望我的应用程序在空闲时执行某些操作。为此,我写了这段代码,只有当DispatcherTimer间隔小于30秒或我的应用程序不是活动窗口时才能正常工作。

    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(); };
    }

那么,当应用程序处于活动窗口时,如何才能使这项工作成为可能?为什么在超时> = 30秒时这不能正常工作?

1 个答案:

答案 0 :(得分:1)

我找到了答案:而不是

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 evnets之间的区别: https://msdn.microsoft.com/en-us/library/system.windows.input.inputmanager(v=vs.110).aspx