WPF .NET每分钟触发事件的最佳方式

时间:2009-01-26 10:38:38

标签: .net wpf timer

我有一个需要每分钟检查一次数据库表的应用程序。该表按时间索引,因此应用程序需要每分钟运行此检查。

最好的方法是什么?我可以创建一个后台工作线程,但是如果我在每次检查后将其设置为休眠60秒,那么由于调用支票的开销,我最终会错过一分钟。

我记得我检查然后检查的那一刻,每隔15秒说一次,如果分钟已经改变,则执行检查。

或者我应该使用其他方法吗?

我正在使用WPF,VS2008和VB.NET

TIA,

西蒙

3 个答案:

答案 0 :(得分:35)

DispatchTimer就是你所追求的 - 只需设置你想要的间隔,然后将一个方法附加到Tick事件 - 就可以了。

答案 1 :(得分:29)

正如MrTelly所说,DispatcherTimer就是这样做的方法。它与Dispatcher队列紧密集成,并确保您的回调在正确的线程上。以下是关于这门课的一些好文章。下面的一些示例代码详细介绍了一个基本示例:

//  DispatcherTimer setup
dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,1);
dispatcherTimer.Start();

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    // Updating the Label which displays the current second
    lblSeconds.Content = DateTime.Now.Second;

    // Forcing the CommandManager to raise the RequerySuggested event
    CommandManager.InvalidateRequerySuggested();
}

Timer vs DispatcherTimer

MSDN Documentation

答案 2 :(得分:1)

不确定WPF,但在WinForms中,有一个Timer控件。如果没有,则一种方法是以下循环:

  • 检查我们是否已超过最后一刻
  • 如果没有,请暂时睡一觉并再次查看
  • 做事
  • 检查当前时间
  • 保存分钟
  • 睡眠60000ms - 当前时间(秒和毫秒部分) - 某个值