0

我找到了这篇文章并创建了一个类,用它来检测非活动时间,效果很好。我将它设置为一分钟,一分钟后我可以让它“做事”。我想做的只是每隔“x”分钟的非活动时间做一些事情;即,如果事情一直处于非活动状态,则每 5 分钟执行一次,并且不要再次重复,直到 X 时间过去。

现在,我可以将计时器设置为每 5 分钟而不是每秒触发一次,但我希望能够“重置”非活动时间的计数。有什么建议么?

这是为了DispatchTimer在 C# 和 WPF 中使用。

4

2 回答 2

1

只需创建一个类级别变量,在您的计时器上增加它,并在您获得活动时重置它。创建一个计时器,例如 tmrDelay,增量为 10000 毫秒,并创建一个按钮 btnActivity 来重置计数,然后执行以下操作:

private int tickCount = 0;
private const int tick_wait = 30; 

private void tmrDelay_Tick(object sender, EventArgs e)
{ 
    tickCount++; 

    if (tickCount > tick_wait)
    {
        DoSomething();

        tickCount = 0;   
    }
}
private void btnActivity_Click(object sender, EventArgs e)
{
    tickCount = 0;
}
于 2013-10-01T17:23:45.647 回答
0

听起来您想要以下内容:

static DispatcherTimer dt = new DispatcherTimer();

static LastInput()
{
    dt.Tick += dt_Tick;
}

static void dt_Tick(object sender, EventArgs e)
{
    var timer = (DispatcherTimer)sender;
    var timeSinceInput = TimeSpan.FromTicks(GetLastInputTime());

    if (timeSinceInput < TimeSpan.FromMinutes(5))
    {
        timer.Interval = TimeSpan.FromMinutes(5) - timeSinceInput;
    }
    else
    {
        timer.Interval = TimeSpan.FromMinutes(5);
        //Do stuff here
    }
}

这将每 5 分钟轮询一次,以查看系统是否空闲 5 分钟或更长时间。如果它的空闲时间少于 5 分钟,它将调整时间,以便它会在 5 分钟标记处再次关闭。显然,如果自设置计时器以来一直有活动,它将再次调整,因此它将始终瞄准 5 分钟的空闲时间。

如果您真的想重置活动时间,那么您实际上需要通过移动鼠标发送按键来触发某些活动

于 2013-10-01T18:58:49.447 回答