C sharp - Parpadeo de texto con timer

 
Vista:
sin imagen de perfil
Val: 168
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Parpadeo de texto con timer

Publicado por Meta (122 intervenciones) el 10/02/2019 22:09:53
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.

pantalla-1999764

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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.3 seg.
                    Thread.Sleep(300);
                }
            }
        }
    }

Quiero hacer lo mismo, pero con el Timer en modo consola. Por lo que se vez, dos timer, uno de 500 ms y otro de 300 ms.

¿Es posibe hacerlo?

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 168
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Parpadeo de texto con timer

Publicado por Meta (122 intervenciones) el 11/02/2019 06:38:46
Hola:

Lo intenté con el timer pero me da error:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Timers;
 
namespace Parpadeo_texto_consola_02_cs
{
    class Program
    {
 
        static void Main(string[] args)
        {
            T500(); // Llamar 500ms.
            Console.ReadKey();
        }
 
        private static void T500()
        {
            Timer temporizador500 = new Timer();
            temporizador500.Interval = 500;
            temporizador500.Elapsed += Timer500;
            temporizador500.Start();
            T300(); // Cuando acabe los 500 ms, activa el de 300 ms.
            temporizador500.Stop();
        }
 
        private static void T300()
        {
            Timer temporizador300 = new Timer();
            temporizador300.Interval = 300;
            temporizador300.Elapsed += Timer500;
            temporizador300.Start();
            T500(); // Vuelve activar el 500 ms.
            temporizador300.Stop();
        }
 
        private static void Timer500(Object source, ElapsedEventArgs e)
        {
            Console.SetCursorPosition(0, 0);
            Console.Write("Hola mundo");
        }
 
        private static void Timer300(Object source, ElapsedEventArgs e)
        {
            Console.SetCursorPosition(0, 0);
            Console.Write("          ");
        }
    }
}

Se usa dos timer, uno de 500ms y el otro de 300 ms.

El de 500 ms muestra el texto y el de 300 ms lo hace desaparecer durante ese tiempo y vuelta a empezar.

¿Alguna solución?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Parpadeo de texto con timer

Publicado por Nacho (115 intervenciones) el 11/02/2019 15:53:30
Más que dar error lo que hará es explotar.

Un timer se activa una vez con el start. Una vez activado, si el modo de funcionamiento es periodic o algo así, se llamará cada vez que pase el lapso de tiempo que le indiques. Lo que haces tú es crear un timer cada ese lapso.

Si quieres empezar, empieza por el principio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 168
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Parpadeo de texto con timer

Publicado por Meta (122 intervenciones) el 11/02/2019 17:34:03
Itenté con el mismo timer, de 500 ms, luego de 30 ms, así sucesivamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Parpadeo de texto con timer

Publicado por Nacho (115 intervenciones) el 11/02/2019 20:23:52
Haz un algoritmo con pseudocódigo para ver cómo tiene que ser el programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 168
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Parpadeo de texto con timer

Publicado por Meta (122 intervenciones) el 11/02/2019 21:19:16
Buenas:

Mostrar en pantalla el texto ¡Hola mundo! durante 500 ms.
Texto desaparece en 300 ms (no en 30 ms como puese arriba que me equivoqué al escribir).
Se repite el ciclo.

Simplemente hace esto.
pantalla-1999764

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Parpadeo de texto con timer

Publicado por Nacho (115 intervenciones) el 12/02/2019 12:09:12
Eso no, se trata de describir paso a paso lo que tiene que hacer el programa.

Al programar hay que intentar usar la menor cantidad de recursos posible. Dos timers es mucho, se usa uno.

Contador=0
Se crea el timer
Como hacen falta dos lapsos de tiempo se establece como lapso el máximo común divisor de los dos lapsos, 100
El timer llama a la función ontimer
Se pone en marcha el timer

ontimer
incrementa contador
si contador es múltiplo de 500 pon texto
si contador es múltiplo de 800 borra texto y contador a 0
fin ontimer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Parpadeo de texto con timer

Publicado por Nacho (115 intervenciones) el 12/02/2019 12:38:47
Como se pone el contador a 0 mejor se compara con 500 y 800 en vez de dividir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 168
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Parpadeo de texto con timer

Publicado por Meta (122 intervenciones) el 12/02/2019 17:34:47
Buenas:

He encontrado esto pero no entiendo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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();
        }
    }
}

No entiendo estar parte de la a y b.

1
blink.Elapsed += (a, b) =>

Uno es de 50 ms. ¿El ed 300 ms dónde está?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Parpadeo de texto con timer

Publicado por Nacho (115 intervenciones) el 12/02/2019 20:35:51
No hay de 300. Es un timer de 500 y según el valor de mostrar, que cambia en cada llamada a la función del timer, muesta el texto o lo borra.

blink.Elapsed += (a, b) => establece la función del timer, que es lo que viene a continuación entre llaves. a y b son los parámetros que recibe esa función.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 168
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Parpadeo de texto con timer

Publicado por Meta (122 intervenciones) el 12/02/2019 21:27:53
Gracias por las respuestas.

¿Cómo lo harían ustedes?

Ya que el código puede ser mejor que este.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Parpadeo de texto con timer

Publicado por Nacho (115 intervenciones) el 13/02/2019 05:31:30
¿El qué puede ser mejor?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar