¿Cómo puedo agregar un retraso a un programa en C #?
¿Cómo puedo agregar un retraso a un programa en C #?
Respuestas:
Podrías usar la Thread.Sleep()
función, por ejemplo
int milliseconds = 2000;
Thread.Sleep(milliseconds);
que detiene completamente la ejecución del hilo actual durante 2 segundos.
Probablemente el escenario más apropiado Thread.Sleep
es cuando desea retrasar las operaciones en otro hilo, diferente del principal, por ejemplo:
MAIN THREAD --------------------------------------------------------->
(UI, CONSOLE ETC.) | |
| |
OTHER THREAD ----- ADD A DELAY (Thread.Sleep) ------>
Para otros escenarios (por ejemplo, iniciar operaciones después de un tiempo, etc.) verifique la respuesta de Cody .
await Task.Delay(milliseconds)
. Esto funcionó para mí :)
Use un temporizador con un intervalo establecido de 2 a 3 segundos.
Tiene tres opciones diferentes para elegir, según el tipo de aplicación que esté escribiendo:
No lo use Thread.Sleep
si su aplicación necesita procesar cualquier entrada en ese hilo al mismo tiempo (WinForms, WPF), ya Sleep
que bloqueará completamente el hilo y evitará que procese otros mensajes. Suponiendo una aplicación de un solo subproceso (como la mayoría), toda su aplicación dejará de responder, en lugar de solo retrasar una operación como probablemente haya pensado. Tenga en cuenta que puede estar bien usar Sleep en la aplicación de consola pura ya que no hay "eventos" para manejar o en un hilo separado (también Task.Delay
es una mejor opción).
Además de los temporizadores Sleep
, puede usar una Task.Delay
versión asincrónica Sleep
que no bloquee el hilo de los eventos de procesamiento (si se usa correctamente, no lo convierta en suspensión infinita con .Wait()
).
public async void ClickHandler(...)
{
// whatever you need to do before delay goes here
await Task.Delay(2000);
// whatever you need to do after delay.
}
Lo mismo await Task.Delay(2000)
puede usarse en un Main
método de una aplicación de consola si usa C # 7.1 ( Async main en los blogs de MSDN ).
Nota: retrasar la operación Sleep
tiene el beneficio de evitar las condiciones de carrera que surgen de iniciar potencialmente múltiples operaciones con temporizadores Delay
. Desafortunadamente, la aplicación congelada basada en la interfaz de usuario no es aceptable, por lo que debe pensar en lo que sucederá si inicia varios retrasos (es decir, si se activa al hacer clic en un botón). La operación se puede realizar varias veces de forma segura.
Thread.Sleep
advertencia puede no ser tan importante.
await Task.Delay()
versión y un comentario en línea que la aplicación de consola realmente quiera usar Sleep
(no asincrónica Main
) o Delay
(asincrónica Main
)
Durante 2,3 segundos debes hacer:
System.Threading.Thread.Sleep(2300);
System.Threading.Thread.Sleep(
(int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);
O con using
declaraciones:
Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);
Prefiero esto a 1000 * numSeconds
(o simplemente 3000
) porque hace más obvio lo que le está sucediendo a alguien que no ha usado Thread.Sleep
antes. Mejor documenta tu intención.
Thread.Sleep(TimeSpan)
directamente, sin tener que enviarlo a un int.