c# system

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"); }