.net - que - visual studio wpf
WPF.NET La mejor manera de activar un evento cada minuto (3)
Como dijo MrTelly, el DispatcherTimer es la manera de hacer esto. Está estrechamente integrado con la cola Dispatcher y se asegura de que sus devoluciones de llamada estén en la secuencia correcta. A continuación hay algunos buenos artículos sobre esta clase. A continuación se muestra un código de muestra que detalla un ejemplo básico:
// 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();
}
Tengo una aplicación que necesita verificar la tabla de la base de datos cada minuto. La tabla está indexada según la hora del día, por lo que la aplicación debe ejecutar esta verificación cada minuto.
¿Cuál es la mejor forma de hacer esto? Puedo crear un hilo de trabajador en segundo plano, pero si lo configuro para que duerma durante 60 segundos después de cada comprobación, eventualmente perderé un minuto debido a la sobrecarga de llamar al cheque.
¿Recuerdo el momento en que lo revisé y luego lo revisé, cada 15 segundos, por ejemplo, y si el minuto había cambiado, realizaba el control entonces?
¿O hay algún otro enfoque que debería usar?
Estoy usando WPF, VS2008 y VB.NET
TIA,
Simon
El DispatchTimer es lo que buscas: simplemente establece el intervalo que deseas y, luego, adjunta un método al evento Tick, funciona de maravilla.
No estoy seguro acerca de WPF, pero en WinForms, hay un control Timer para esto. Si no hay uno, una forma es el siguiente ciclo:
- Comprueba si hemos pasado el último minuto establecido
- Si no, duerma durante un tiempo breve y verifica nuevamente
- Hacer cosas
- Verifique la hora actual
- Ahorre el minuto
- Duerme durante 60000ms - tiempo actual (parte sec y ms) - algún valor