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?
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
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.
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...
- Threading - docs.microsoft.com (https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/threading/)
- Asynchronous programming - docs.microsoft.com (https://docs.microsoft.com/en-us/dotnet/csharp/async)
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:
private void MostrarMensaje() {
Task t = new Task(() => {
MessageBox.Show("Mensaje 1");
Thread.Sleep(TimeSpan.FromMinutes(1));
MessageBox.Show("Mensaje 2");
});
t.Start();
}
Saludos.
Gracias por la información, ya me pongo a estudiar sobre programación asincronica ;-)