0

私は今日この問題を抱えています、私はこの解決策を見ました:

私のアプリケーションがC#でアイドル状態であることを検出する方法は?

私はそれを試しましたが、私のフォームは userControls やその他の要素で覆われており、マウスオーバーまたはキーダウン イベントはそれらの要素の余白でのみ発生します。

より良い方法はありますか?

4

2 に答える 2

2

タイマーとマウス イベントを使用してソリューションをハッキングする必要はありません。Application.Idle イベントを処理するだけです。

Application.Idle += Application_Idle;

private void Application_Idle(object sender, EventArgs e)
{
    //    The application is now idle.
}
于 2013-01-21T16:28:15.537 に答える
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!");
   }
}
于 2013-01-21T17:39:51.347 に答える