如何阻止Timer Tick发送垃圾邮件?

时间:2014-01-31 17:07:22

标签: c#

我正在尝试从这个线程实现空闲检测:Hide mouse cursor after an idle time

我对它做了很少的改动,但我遇到了垃圾测试MessageBox的问题。

void activityWorker_Tick(object sender, EventArgs e)
    {
        bool checkIdle = (User32Interop.GetLastInput() > activityThreshold);

        if (isIdle != checkIdle)
        {
            if (checkIdle && (DateTime.Now.Subtract(idleCheckTimestamp) > TimeSpan.FromMinutes(1)))
            {
                System.Windows.Forms.MessageBox.Show("Idle: " + count);
                idleCheckTimestamp = DateTime.Now;
                count++;
            }

            isIdle = checkIdle;
        }
    }

每次此事件触发时,都会显示消息框,但在其运行后没有任何内容,因此似乎无法阻止其发送垃圾邮件。它不会重置时间戳,也不会增加计数变量,它只是使用“空闲:0”阻止消息框。

有人能指出我正确的方向,让它停止发送垃圾邮件吗?我希望系统不断检查空闲时间,但我只希望我的代码每分钟触发一次。如果它实际上是空闲的话。或者等等。

2 个答案:

答案 0 :(得分:1)

您可以通过保留变量并存储最后发送消息的时间来执行此操作,然后您可以检查是否已经过了1分钟,然后您可以再次显示消息。例如:

DateTime LastMessageSentOn;
//Initialize it in constructor or anywhere else before using.

void activityWorker_Tick(object sender, EventArgs e)
{
    bool checkIdle = (User32Interop.GetLastInput() > activityThreshold);

    if (isIdle != checkIdle)
    {
        if (checkIdle && LastMessageSentOn.AddMintues(1)<DateTime.Now)
        {
            System.Windows.Forms.MessageBox.Show("Idle: " + count);
            LastMessageSentOn = DateTime.Now;
            count++;
        }

        isIdle = checkIdle;
    }
}

答案 1 :(得分:1)

正如Hans写的那样,你可以在System.Windows.Forms.MessageBox.Show(“Idle:”+ count)之前禁用定时器(Enabled = false);

之后再次启用它