我找到了这篇文章并创建了一个类,用它来检测非活动时间,效果很好。我将它设置为一分钟,一分钟后我可以让它“做事”。我想做的只是每隔“x”分钟的非活动时间做一些事情;即,如果事情一直处于非活动状态,则每 5 分钟执行一次,并且不要再次重复,直到 X 时间过去。
现在,我可以将计时器设置为每 5 分钟而不是每秒触发一次,但我希望能够“重置”非活动时间的计数。有什么建议么?
这是为了DispatchTimer
在 C# 和 WPF 中使用。
我找到了这篇文章并创建了一个类,用它来检测非活动时间,效果很好。我将它设置为一分钟,一分钟后我可以让它“做事”。我想做的只是每隔“x”分钟的非活动时间做一些事情;即,如果事情一直处于非活动状态,则每 5 分钟执行一次,并且不要再次重复,直到 X 时间过去。
现在,我可以将计时器设置为每 5 分钟而不是每秒触发一次,但我希望能够“重置”非活动时间的计数。有什么建议么?
这是为了DispatchTimer
在 C# 和 WPF 中使用。
只需创建一个类级别变量,在您的计时器上增加它,并在您获得活动时重置它。创建一个计时器,例如 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;
}
听起来您想要以下内容:
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 分钟的空闲时间。
如果您真的想重置活动时间,那么您实际上需要通过移动鼠标或发送按键来触发某些活动