如何检测我的应用程序在c#(表格覆盖)中是空闲的?

时间:2013-01-21 16:14:20

标签: c# detect

我今天遇到这个问题,我看到了这个解决方案:

How to detect my application is idle in c#?

我试过了,但我的表单中包含了userControls和其他元素,而mouseover或keydown事件只在这些元素的边缘触发。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

使用计时器和鼠标事件将解决方案合并在一起是不必要的。只需处理Application.Idle事件。

Application.Idle += Application_Idle;

private void Application_Idle(object sender, EventArgs e)
{
    //    The application is now idle.
}

答案 1 :(得分:1)

如果您想要一种更加动态的方法,您可以订阅Form中的所有事件,因为如果用户空闲,最终不会引发任何事件。

private void HookEvents()
{
    foreach (EventInfo e in GetType().GetEvents())
    {
        MethodInfo method = GetType().GetMethod("HandleEvent", BindingFlags.NonPublic | BindingFlags.Instance);
        Delegate provider = Delegate.CreateDelegate(e.EventHandlerType, this, method);
        e.AddEventHandler(this, provider);
    }
}

private void HandleEvent(object sender, EventArgs eventArgs)
{
    lastInteraction = DateTime.Now;
}

您可以声明一个全局变量private DateTime lastInteraction = DateTime.Now;并从事件处理程序分配给它。然后,您可以编写一个简单属性来确定自上次用户交互以来经过的秒数。

private TimeSpan LastInteraction
{
    get { return DateTime.Now - lastInteraction; }
}

然后按照原始解决方案中的描述使用Timer轮询该属性。

private void timer1_Tick(object sender, EventArgs e)
{
   if (LastInteraction.TotalSeconds > 90)
   {
       MessageBox.Show("Idle!", "Come Back! I need You!");
   }
}