我希望我的应用程序在空闲时执行某些操作。为此,我写了这段代码,只有当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秒时这不能正常工作?
答案 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;
};
以下是PreProcessInput
,PreNotifyInput
和其他InputManager evnets之间的区别:
https://msdn.microsoft.com/en-us/library/system.windows.input.inputmanager(v=vs.110).aspx