(transcrito a partir de Ben como comentario)
sólo tiene que utilizar System.Windows.Forms.Timer. Configure el temporizador por 5 segundos y maneje el evento Tick. Cuando el evento se dispare, hazlo.
...y deshabilite el temporizador (IsEnabled = false) antes de hacer su trabajo en oder para suprimir un segundo.
El Tick caso puede ser ejecutadas en otro hilo que no se puede modificar su interfaz gráfica de usuario, se puede tomar esto:
private System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
private void StartAsyncTimedWork()
{
myTimer.Interval = 5000;
myTimer.Tick += new EventHandler(myTimer_Tick);
myTimer.Start();
}
private void myTimer_Tick(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
/* Not on UI thread, reenter there... */
this.BeginInvoke(new EventHandler(myTimer_Tick), sender, e);
}
else
{
lock (myTimer)
{
/* only work when this is no reentry while we are already working */
if (this.myTimer.Enabled)
{
this.myTimer.Stop();
this.doMyDelayedWork();
this.myTimer.Start(); /* optionally restart for periodic work */
}
}
}
}
simplemente para la corrección: con asíncrono/esperan, uno puede retrasar la ejecución de algo muy fácil (una sola toma, sin repetir la invocación):
private async Task delayedWork()
{
await Task.Delay(5000);
this.doMyDelayedWork();
}
//This could be a button click event handler or the like */
private void StartAsyncTimedWork()
{
Task ignoredAwaitableResult = this.delayedWork();
}
Para más información, véase "asíncrono y esperar" en MSDN.
sólo tiene que utilizar 'System.Windows.Forms.Timer'. Establezca el temporizador durante 5 segundos y maneje el evento 'Tick'. Cuando el evento se dispare, hazlo. – Ben
Estamos agregando una nueva característica a C# 5 que hace que este tipo de operación asincrónica sea mucho más fácil; Si está interesado en obtener un adelanto, comience con esta publicación de blog: http://blogs.msdn.com/b/csharpfaq/archive/2011/04/13/async-ctp-sp1-refresh.aspx –
Way para ir a Microsoft! –