Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: JayJay0525 en 5 Septiembre 2018, 05:22 am



Título: Pausa en C#
Publicado por: JayJay0525 en 5 Septiembre 2018, 05:22 am
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?


Título: Re: Pausa en C#
Publicado por: b0nete en 5 Septiembre 2018, 05:45 am
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


Título: Re: Pausa en C#
Publicado por: JayJay0525 en 5 Septiembre 2018, 05:56 am
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.


Título: Re: Pausa en C#
Publicado por: Eleкtro en 5 Septiembre 2018, 06:23 am
Intente 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:

Código
  1. private void MostrarMensaje() {
  2. Task t = new Task(() => {
  3. MessageBox.Show("Mensaje 1");
  4. Thread.Sleep(TimeSpan.FromMinutes(1));
  5. MessageBox.Show("Mensaje 2");
  6. });
  7.  
  8. t.Start();
  9. }

Saludos.


Título: Re: Pausa en C#
Publicado por: JayJay0525 en 5 Septiembre 2018, 07:11 am
Gracias por la información, ya me pongo a estudiar sobre programación asincronica  ;-)