(расшифровано от Бена как комментарий)
просто используйте System.Windows.Forms.Timer.Установите таймер на 5 секунд и обработайте событие Tick.Когда событие сработает, сделайте это.
... и отключите таймер (IsEnabled = false), прежде чем выполнять свою работу в oder, чтобы подавить секунду.
Событие Tick может выполняться в другом потоке, который не может изменить ваш графический интерфейс, вы можете уловить это:
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 */
}
}
}
}
Просто для полноты: с помощью async / await можно отложить выполнение оченьeasy (один выстрел, никогда не повторять вызов):
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();
}
Подробнее см. «Асинхронизация и ожидание» в MSDN.