Ответ 1
DispatcherTimer - это то, что вам нужно - просто установите желаемый интервал, а затем присоедините метод к событию Tick - сработает.
У меня есть приложение, которое нужно проверять таблицу базы данных каждую минуту. Таблица индексируется по времени суток, и поэтому приложение должно запускать эту проверку каждую минуту.
Что лучше всего сделать это? Я могу создать фоновый рабочий поток, но если я заставлю его спать в течение 60 секунд после каждой проверки, я, в конце концов, пропущу минуту из-за накладных расходов, вызвавших проверку.
Помню ли я минуту, которую я проверил, а затем проверяю, каждые 15 секунд говорят, и если минута изменилась, выполните проверку.
Или есть ли другой подход, который я должен использовать?
Я использую WPF, VS2008 и VB.NET
ТИА,
Саймон
DispatcherTimer - это то, что вам нужно - просто установите желаемый интервал, а затем присоедините метод к событию Tick - сработает.
Как сказал MrTelly, DispatcherTimer - это способ сделать это. Он тесно интегрирован с очередью диспетчера и гарантирует, что ваши обратные вызовы находятся в правильном потоке. Ниже приведены некоторые хорошие статьи об этом классе. В некотором примере кода ниже приведен пример базового примера:
// 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();
}
Не уверен в WPF, но в WinForms для этого есть таймер. Если его нет, один из способов - это следующий цикл: