Pausa en C#

Iniciado por JayJay0525, 5 Septiembre 2018, 05:22 AM

0 Miembros y 1 Visitante están viendo este tema.

JayJay0525

Buenas chicos, necesito hacer una pausa para que no siga ejecutando el código de un método. Intente hacerlo con Sleep pero me pausa literalmente el programa y necesito que siga funcionando, también intente hacerlo con un Timer pero cuando llega al Timer.Start() lo que hace es que entra el Timer pero continua ejecutando la siguiente linea normal y necesito que se espere 1min antes de ir a la siguiente linea.

Por ejemplo digamos que tengo:
Citar
private void MostrarMensaje()
{
      MessageBox.Show("Mensaje 1");
      //Hacer pausa de 1min
      MessageBox.Show("Mensaje 2");
}

Hay alguna forma de hacer una pausa luego de mostrar el mensaje 1 pero que siga funcionando el programa?

b0nete

Creo que con una googleada lo hubieses encontrado bastante rápido.

int milliseconds = 2000; Thread.Sleep(milliseconds);

Eso son 2 segundos.

Por otro lado, para C# te recomiendo msdn.microsoft que es el foro oficial. O stackoverflow para cualquier lenguaje.

Saludos.

Enviado desde mi D2305 mediante Tapatalk

JayJay0525

Buenas pero con Sleep se paran todos los procesos y necesito que la interfaz de usuario se mantenga activa. Estoy leyendo sobre programación asincronica que según me dicen seria lo que necesito.

Eleкtro

#3
Cita de: JayJay0525 en  5 Septiembre 2018, 05:22 AMIntente hacerlo con Sleep pero me pausa literalmente el programa

Lo apropiado sería decir que se pausa el hilo de la interfaz gráfica, precisamente por que estás ejecutando dicha orden (System.Threading.Thread.Sleep) en dicho hilo. Aperte de eso, la función System.MessageBox.Show también es una llamada bloqueante, es decir, que también bloquea el hilo, pero no me ha quedado claro si el primer mensaje quieres que sea bloqueante o no...

Deberías documentarte al respecto, y practicar, puesto que la programación asincrónica a corto o largo plazo forma parte necesaria de las necesidades de un programador...





Para resolver el problema que has expuesto bien puedes solucionarlo de forma simple y sencilla mediante el uso de la clase System.Threading.Tasks.Task:

Código (csharp) [Seleccionar]
private void MostrarMensaje() {
Task t = new Task(() => {
MessageBox.Show("Mensaje 1");
Thread.Sleep(TimeSpan.FromMinutes(1));
MessageBox.Show("Mensaje 2");
});

t.Start();
}


Saludos.








JayJay0525

Gracias por la información, ya me pongo a estudiar sobre programación asincronica  ;-)