WPF .NET Лучший способ вызывать событие каждую минуту - PullRequest
26 голосов
/ 26 января 2009

У меня есть приложение, которое должно проверять таблицу базы данных каждую минуту. Таблица индексируется по времени суток, поэтому приложение должно запускать эту проверку каждую минуту.

Какой лучший способ сделать это? Я могу создать фоновый рабочий поток, но если я установлю его в спящий режим на 60 секунд после каждой проверки, я в конце концов упущу минуту из-за накладных расходов при вызове проверки.

Я помню минуту, которую я проверил, и затем проверяю, каждые 15 секунд говорят, и если минута изменилась, выполнял проверку тогда.

Или есть какой-то другой подход, который я должен использовать?

Я использую WPF, VS2008 и VB.NET

ТИА,

Simon

Ответы [ 3 ]

35 голосов
/ 26 января 2009

DispatcherTimer - это то, что вам нужно - просто установите нужный интервал, а затем присоедините метод к событию Tick - сработает.

29 голосов
/ 26 января 2009

Как сказал 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();
}

Таймер против DispatcherTimer

Документация MSDN

1 голос
/ 26 января 2009

Не уверен насчет WPF, но в WinForms для этого есть элемент управления Timer. Если его нет, можно использовать следующий цикл:

  • Проверьте, не прошли ли мы последние установленные минуты
  • Если нет, поспите немного и проверьте снова
  • Делать вещи
  • Проверьте текущее время
  • Экономь минуту
  • Сон 60000 мс - текущее время (в секундах и мс) - некоторое значение
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...