我怎样才能让一个计时器最后一分钟然后停止
问题描述:
我正在使用DispatchTimer每秒做一些事情,我该如何让它做一些设定的时间量说1分钟或2分钟?我是否需要嵌套的DispatcherTimer?我怎样才能让一个计时器最后一分钟然后停止
我的代码如下
System.Windows.Threading.DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();
private void StartButton_Click(object sender, RoutedEventArgs e)
{
TimeSpan interval;
interval = (TimeSpan)intervalPicker.Value;
dt.Interval = interval;
dt.Tick += new EventHandler(dt_Tick);
dt.Start();
}
void dt_Tick(object sender, EventArgs e)
{
//Do Something
}
我将不胜感激,如果你能帮助我的感谢。
答
使用Stopwatch
类:
Stopwatch sw = new Stopwatch();
private void StartButton_Click(object sender, RoutedEventArgs e)
{
sw.Start();
...
}
void dt_Tick(object sender, EventArgs e)
{
// stops the timer after 66 seconds
if(sw.ElapsedMilliseconds/1000 > 66)
{
dt.Stop();
sw.Reset();
}
}
答
Cimbalino Windows Phone Toolkit(提供NuGet)包含DispatcherExtensions类与执行指定超时后的动作一BeginInvokeAfterTimeout()方法。
如果您愿意,您可以复制源代码中的DispatcherExtensions文件并将其用于您自己的项目中。
这是一个坏主意。如果定时器启动,比如在我们将时钟设置回夏令时之前三秒钟,那么定时器将运行超过一个小时。如果它在时钟提前设置之前启动,那么定时器运行时间不到一分钟。如果用户改变时间,可能会发生同样的事情。启动计时器时最好启动一个“秒表”,然后检查“Elapsed”属性。 – 2012-04-12 22:01:21
@Jim:谢谢,我完全同意...... – thumbmunkeys 2012-04-12 22:05:30
完美的谢谢你们 – 2012-04-12 22:16:57