检测Silverlight应用程序的空闲状态的最佳方法是什么?我现在已经在网上阅读了不少文章,通常它们都是针对wpf /移动应用程序等。
我创建了一个DispatcherTimer,它会在5分钟后锁定屏幕,似乎我必须在每个屏幕中找到每个小部件(我的应用程序有大约4-5个屏幕)并添加一个mousebuttondown或mouseenter eventhandler来重置这个计时器。这似乎没有效率,但只是将处理程序添加到layroot也没有帮助。
有用的建议吗?
由于
答案 0 :(得分:5)
您无需修改每个控件。如果在启动时添加以下代码:
Application.Current.RootVisual.MouseMove += new MouseEventHandler(RootVisual_MouseMove);
Application.Current.RootVisual.KeyDown += new KeyEventHandler(RootVisual_KeyDown);
使用以下事件处理程序:
private void RootVisual_KeyDown(object sender, KeyEventArgs e)
{
idle = false;
}
private void RootVisual_MouseMove(object sender, MouseEventArgs e)
{
idle = false;
}
idle
是您在DispatcherTimer
Tick
事件中使用的变量,用于检查事情是否正在发生。
当事件冒泡树时,这应适用于所有控件。
答案 1 :(得分:2)
处理的事件不会冒泡到根控制。相反,您应该将AddHandler
方法与handledEventsToo = true
一起使用。