2013-01-21 89 views
0

我有這個問題,我看到這個解決方案:如何檢測我的應用程序在c#中閒置(窗體覆蓋)?今天

How to detect my application is idle in c#?

我試過了,但我的形式覆蓋着用戶控件和其他元素,鼠標懸停或的keydown事件僅在邊緣發射那些元素。

有沒有更好的方法?

+1

是的,我們可以告訴你嗎?不,我們不能,爲什麼?因爲你沒有向我們展示代碼,你已經嘗試過,我們可以改進:) – RhysW

+0

你嘗試看看你鏈接的問題[鏈接在這個答案](http://stackoverflow.com/a/5883435/479512)。 –

回答

2

將解決方案與定時器和鼠標事件一起使用是不必要的。只需處理Application.Idle事件。

Application.Idle += Application_Idle; 

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

但是你必須一起破解一些東西來表明用戶不是空閒的:D –

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!"); 
    } 
} 
相關問題