esperando un segundo cada vez en un bucle en c#usando Thread.Sleep
system (2)
¿Por qué no funcionó sin llaves?
C # no es Python. En Python, la estructura del programa se indica mediante espacios. En C #, el espacio en blanco se ignora por completo y la estructura del programa está determinada por la gramática del lenguaje.
En C #, un bloque de la forma
{ any number of statements }
es en sí mismo una declaración.
La gramática de
while
es
while( an expression that can be evaluated to bool )
a single statement
Pero dado que
{ ... }
es
una declaración única
, si desea varias declaraciones en el cuerpo de su
while
, o
if
,
for
o
foreach
etc., usa un bloque.
Por cierto,
no deberías estar usando Thread.Sleep en primer lugar
.
Solo debe usarse en el código de prueba.
Los hilos son costosos recursos del programa;
no les pagues a dormir!
Si desea introducir un retraso, entonces hay dos cosas que hacer.
En un programa controlado por eventos, inicie un temporizador y luego controle el evento del temporizador cuando se apaga.
O haga que su programa sea asíncrono y espere una
Task.Delay
.
Task.Delay
.
Dormir es una mala práctica e indica que hay algún defecto en el diseño de su programa.
Ahora, podría decir, hey, este es un programa de consola y realmente quiero introducir un retraso en mi experiencia de usuario, y no tengo ningún procesamiento de eventos en segundo plano, y así sucesivamente, así que ¿por qué no dormir? Y puedo entender ese argumento; es conveniente. Sin embargo, (1) adquiere buenos hábitos ahora mientras todavía es un principiante y no tendrá que romperlos más tarde, y (2) los programas evolucionan. En algún momento, querrá escribir un programa que permanezca interactivo y responda a las pulsaciones de teclas del usuario, al tráfico de la red o cualquier otra cosa, mientras la interfaz de usuario está en pausa; Si sus hilos están dormidos, no están respondiendo a esos eventos.
Estoy tratando de imprimir "p" en la pantalla cada segundo.
cuando ejecuto esto:
while (true)
Thread.Sleep(1000);
Console.WriteLine("p");
No se imprime en absoluto. Pero cuando ejecuto esto:
while (true)
Console.WriteLine("p");
Thread.Sleep(1000);
Su impresión sin esperar en absoluto. ¿Alguien puede explicarme esto y sugerir una solución?
No estás haciendo un bucle de todo el código
Esta :
while (true)
Thread.Sleep(1000);
Console.WriteLine("p");
Es lo mismo que esto:
while (true)
{
Thread.Sleep(1000);
}
Console.WriteLine("p");
Debe establecer explícitamente sus llaves alrededor de todas las líneas que desea que realice el bucle; de lo contrario, solo se repetirá en la siguiente instrucción.
Algo como esto es lo que estás buscando:
while (true)
{
Thread.Sleep(1000);
Console.WriteLine("p");
}