none
Parpadeo de un texto. RRS feed

  • Pregunta

  • Hola:

    Quiero hacer un parpadeo de un texto en modo consola. Por ahora solo me sale con Sleep, pero no me gusta este. Aún así dejo un ejemplo de lo que quiero pero está hecho en Sleep.

    using System;
    using System.Threading; // No olvidar.
    
    namespace Parpadeo_texto_consola_01_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Blink";
    
                // Tamaño ventana consola.
                // X anchura.
                Console.WindowWidth = 16;
    
                // Y altura.
                Console.WindowHeight = 2;
    
                // Oculto el cursor.
                Console.CursorVisible = false;
    
                // Como estamos en un ejemplo, da igual en este caso
                // poner un bucle infinito. Quiero que se muestre el
                // resultado.
                while (true)
                {
                    // Posición de la pantalla.
                    Console.SetCursorPosition(0, 0);
    
                    // Mostrar texto en pantalla.
                    Console.Write("Hola mundo");
    
                    // Retardo de 0.5 segundos. 1000 ml (mili segundos)
                    // es igual a 1 segundo.
                    Thread.Sleep(500);
    
                    // Posición de la pantalla.
                    Console.SetCursorPosition(0, 0);
    
                    // Mostrar espaciones en blanco para borrar texto anterior.
                    Console.Write("          ");
    
                    // Retardo 0.5 seg.
                    Thread.Sleep(500);
                }
            }
        }
    }
    

    Quiero hacer lo mismo, pero con el Timer en modo consola, lo que me cuesta hacerlo. Ya qu el timer pude interrumpir el programa cuando está dentro del temporizador pero con el Sleep, hasta que no acabe el tiempo, el programa se queda como en esclavo, sobre todo en tiempos muy largos.

    ¿Hay alguna forma de hacerlo en modo consola?

    Saludos.


    http://electronica-pic.blogspot.com

    viernes, 8 de febrero de 2019 20:18

Todas las respuestas

  • Hola 
    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que estaremos realizando una revisi�n a profundidad acerca del inconveniente que se te est� presentando.
    Proporcionaremos una respuesta lo m�s pronto posible.
    Gracias por usar los foros de MSDN.
    Pedro Alfaro
     ____
    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma com�n de reconocer a aquellos que han ayudado, y hace que sea m�s f�cil para los otros visitantes encontrar la soluci�n m�s tarde.
    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliaci�n de la base de datos de conocimientos relacionados con los productos y tecnolog�as de Microsoft. 
    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    viernes, 8 de febrero de 2019 22:09
    Moderador
  • Hola metaconta tu problema es mas bien de hilos ya que tu programa se ejecuta en un subproceso distinto del sleep y eso hace que tu programa se bloquee asta que el sleep termine te recomiendo que crear un metodo y dentro de ese metodo pones tu codigo y despues desde el metodo main creas un thread y llamas a tu metodo desde ese hilo asi no se bloqueara el programa ya que se van a ejecutar los dos hilos sin que uno interfiera con el otro 

    saludos y buenas noches


    • Editado DANTE-3D viernes, 8 de febrero de 2019 23:32
    viernes, 8 de febrero de 2019 23:32
  • Trata de hacerlo con el timer… o con el secuenciador MIDI.

    using System;
    
    namespace Parpadeo_texto_consola_01_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Título de la ventana.
                Console.Title = "Blink";
    
                // Tamaño ventana consola.
                // X anchura.
                Console.WindowWidth = 16;
    
                // Y altura.
                Console.WindowHeight = 2;
    
                // Oculto el cursor.
                Console.CursorVisible = false;
    
                // Como estamos en un ejemplo, da igual en este caso
                // poner un bucle infinito. Quiero que se muestre el
                // resultado.
    
                System.Timers.Timer blink = new System.Timers.Timer(500);
                blink.Enabled = true;
                bool mostrar = true;
                blink.Elapsed += (a, b) =>
                {   // Posición de la pantalla.
                    Console.SetCursorPosition(0, 0);
    
                    // Mostrar texto en pantalla.
                    Console.Write(mostrar ? "Hola mundo" : "          ");
    
                    mostrar = !mostrar;
                };
                Console.ReadKey();
            }
        }
    }

    En otros tiempos, no necesariamente mejores, uno usaba un emulador de terminal ansi. Entonces escribías el código de escape ansi antes del texto. Y vualá.


    Gracias por la ayuda.

    Haz puesto una vez 500 ms. Si quiero que el parpadeo sea de 500 ms para mostrar el mensje y para ocultarlo sea de 200 ms.

    Como solo hay un timer de 500 ms.

    ¿Cómo se hace?

    ;)


    http://electronica-pic.blogspot.com

    sábado, 9 de febrero de 2019 4:25
  • Hola:

    Código difícil para mi de interpretar. Aunque el código sea más largo, lo entiendo mejor así.

                int t = 0;
    
                Timer blink = new Timer(100)
                {
                    Enabled = true
                };
    
                bool mostrar = true;
    
                blink.Elapsed += (a, b) =>
                {
                    switch (t++)
                    {
                        case 0:
                            mostrar = true;
                            break;
    
                        case 5:
                            mostrar = false;
                            break;
    
                        case 6:
                            t = -1;
                            break;
                    }
    
                    // Posición de la pantalla.
                    Console.SetCursorPosition(0, 0);
    
                    // Mostrar texto en pantalla.
                    Console.Write(mostrar ? "Hola mundo" : "          ");
                };
                Console.ReadKey();

    Quiero hacerlo de alguna forma que pueda poner 500 ms y 300 ms, veo que tiene un 100 ms.


    http://electronica-pic.blogspot.com

    sábado, 9 de febrero de 2019 17:32