我在WPF中完成了一个应用程序,使用MvvM / Prism / Unity和Remote作为数据源。
我需要一个基本的东西,在win表单上非常简单,只需检查应用程序是否在几分钟后谜语,如果处于空闲状态,请锁定应用程序并显示登录屏幕。
在google上进行一些搜索后,我发现了一个使用DllImport的解决方案,另一个使用纯Wpf方法。
我不知道我,在我实现了Wpf方式之后(请查看下面的代码)它只有在我登录到应用程序后才有效,如果我打开并点击一个简单的texbox或点击搜索,那么空闲方法并没有被解雇,看起来在背景中有一些东西被绞死,这使得Wpf空闲例行程序认为它不会做什么。
如何查看与may app相关的内存中的所有服务/方法/等等? callstack对我来说并不显示。我很害怕或者我没有以正确的方式调用远程服务或者我在道具PropChanged events / observablecollections / etc上实现了错误......
使用100%Wpf结构有更好的方法吗?
private void CheckIdleTime()
{
handler = delegate
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(5);
timer.Tick += delegate
{
if (timer != null)
{
timer.Stop();
timer = null;
System.Windows.Interop.ComponentDispatcher.ThreadIdle -= handler;
Console.WriteLine("IDLE! Lets logoff!");
this.LockApplication();
Console.WriteLine("logoff fired");
System.Windows.Interop.ComponentDispatcher.ThreadIdle += handler;
}
};
timer.Start();
Dispatcher.CurrentDispatcher.Hooks.OperationPosted += delegate
{
if (timer != null)
{
timer.Stop();
timer = null;
}
};
};
ComponentDispatcher.ThreadIdle += handler;
}
答案 0 :(得分:1)
将会有默认窗口事件找到空闲时间...我认为如果我们为wpf或任何其他应用程序使用相同的事件将是明智的...
以下链接将帮助您实施它。