我怎样才能让一个计时器最后一分钟然后停止

问题描述:

我正在使用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(); 
    }   
} 
+3

这是一个坏主意。如果定时器启动,比如在我们将时钟设置回夏令时之前三秒钟,那么定时器将运行超过一个小时。如果它在时钟提前设置之前启动,那么定时器运行时间不到一分钟。如果用户改变时间,可能会发生同样的事情。启动计时器时最好启动一个“秒表”,然后检查“Elapsed”属性。 – 2012-04-12 22:01:21

+0

@Jim:谢谢,我完全同意...... – thumbmunkeys 2012-04-12 22:05:30

+0

完美的谢谢你们 – 2012-04-12 22:16:57

Cimbalino Windows Phone Toolkit(提供NuGet)包含DispatcherExtensions类与执行指定超时后的动作一BeginInvokeAfterTimeout()方法。

如果您愿意,您可以复制源代码中的DispatcherExtensions文件并将其用于您自己的项目中。