【问题标题】:WPF .NET Best way to trigger an event every minuteWPF .NET 每分钟触发一次事件的最佳方式
【发布时间】:2009-01-26 10:38:38
【问题描述】:

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

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

我记得我检查的那一刻,然后检查,每 15 秒说一次,如果该分钟发生了变化,那么执行检查。

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

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

TIA,

西蒙

【问题讨论】:

    标签: .net wpf timer


    【解决方案1】:

    DispatcherTimer 是您所追求的 - 只需设置所需的时间间隔,然后将方法附加到 Tick 事件 - 很有效。

    【讨论】:

      【解决方案2】:

      正如 MrTelly 所说,DispatcherTimer 就是执行此操作的方法。它与 Dispatcher 队列紧密集成,并确保您的回调在正确的线程上。下面是一些关于这个类的好文章。下面是一些示例代码,详细说明了一个基本示例:

      //  DispatcherTimer setup
      DispatcherTimer 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

      【讨论】:

        【解决方案3】:

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

        • 检查我们是否已经过了最后一分钟设置
        • 如果没有,就睡一小会儿再检查
        • 做事
        • 查看当前时间
        • 节省时间
        • 睡眠 60000 毫秒 - 当前时间(秒和毫秒部分) - 一些值

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          • 1970-01-01
          相关资源
          最近更新 更多