我有這個問題,我看到這個解決方案:如何檢測我的應用程序在c#中閒置(窗體覆蓋)?今天
How to detect my application is idle in c#?
我試過了,但我的形式覆蓋着用戶控件和其他元素,鼠標懸停或的keydown事件僅在邊緣發射那些元素。
有沒有更好的方法?
我有這個問題,我看到這個解決方案:如何檢測我的應用程序在c#中閒置(窗體覆蓋)?今天
How to detect my application is idle in c#?
我試過了,但我的形式覆蓋着用戶控件和其他元素,鼠標懸停或的keydown事件僅在邊緣發射那些元素。
有沒有更好的方法?
將解決方案與定時器和鼠標事件一起使用是不必要的。只需處理Application.Idle事件。
Application.Idle += Application_Idle;
private void Application_Idle(object sender, EventArgs e)
{
// The application is now idle.
}
但是你必須一起破解一些東西來表明用戶不是空閒的:D –
如果你願意,你可以訂閱的所有事件在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!");
}
}
是的,我們可以告訴你嗎?不,我們不能,爲什麼?因爲你沒有向我們展示代碼,你已經嘗試過,我們可以改進:) – RhysW
你嘗試看看你鏈接的問題[鏈接在這個答案](http://stackoverflow.com/a/5883435/479512)。 –