Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Meta en 8 Junio 2018, 04:39 am



Título: No funciona el código
Publicado por: Meta en 8 Junio 2018, 04:39 am
Hola:

Tengo este código de abajo. Solo es un Form y un label. Tiene que alterar los colores con el tiempo de 0.05 segundos, en este ejemplo puse 500 ms para ver el cambio. Mientras el form esté de color blanco, label tiene que estar en negro, luego cambia al revés, es decir, el forma de blanco se pone en negro y las letras del lebel del negro al blanco así por cada cierto tiempo. Nunca muestra el form en pantalla.

Código
  1. using System.Drawing;
  2. using System.Threading;
  3. using System.Windows.Forms;
  4.  
  5. namespace Apruebalos_a_todos_cs
  6. {
  7.    public partial class Form1 : Form
  8.    {
  9.        public Form1()
  10.        {
  11.            InitializeComponent();
  12.  
  13.            while (true)
  14.            {
  15.                cambioColor();
  16.                Thread.Sleep(500);
  17.                cambioColor2();
  18.                Thread.Sleep(500);
  19.            }
  20.        }
  21.  
  22.        void cambioColor()
  23.        {
  24.            this.BackColor = Color.Black; // Formulario negro.
  25.            //this.ForeColor = Color.White; // Cambia textos en blanco.
  26.            label1.ForeColor = Color.White;
  27.        }
  28.  
  29.        void cambioColor2()
  30.        {
  31.            this.BackColor = Color.White; // Formulario blanco.
  32.            //this.ForeColor = Color.Black; // Cambia textos en negro.
  33.            label1.ForeColor = Color.Black;
  34.        }
  35.    }
  36. }

¿Qué hago mal?

Saludos.


Título: Re: No funciona el código
Publicado por: srWhiteSkull en 8 Junio 2018, 05:30 am
Porque esa no es la forma de hacerlo. Si bloqueas el hilo principal de esa forma con un bucle infinito, lo extraño es que no te diga Windows que la aplicación se fue a la ***** y se cierre.

El Thread.Sleep es para usarlo en un hilo. Entonces eso ya te puede dar una pista de como podrías hacerlo, o bien con hilos, algo desproporcionado para la chorrada que vas hacer o usar eventos, por ejemplo con el componente Timer o similar.

https://msdn.microsoft.com/es-es/library/system.timers.timer(v=vs.110).aspx


Título: Re: No funciona el código
Publicado por: Meta en 8 Junio 2018, 07:34 am
Ya me salió.

Código
  1. using System.Drawing;
  2. using System.Windows.Forms;
  3.  
  4. namespace Apruebalos_a_todos_cs
  5. {
  6.    public partial class Form1 : Form
  7.    {
  8.        public Form1()
  9.        {
  10.            InitializeComponent();
  11.            timer1.Start();
  12.        }
  13.  
  14.        void cambioColor()
  15.        {
  16.            this.BackColor = Color.Black; // Formulario negro.
  17.            //this.ForeColor = Color.White; // Cambia textos en blanco.
  18.            label1.ForeColor = Color.White;
  19.        }
  20.  
  21.        void cambioColor2()
  22.        {
  23.            this.BackColor = Color.White; // Formulario blanco.
  24.            //this.ForeColor = Color.Black; // Cambia textos en negro.
  25.            label1.ForeColor = Color.Black;
  26.        }
  27.  
  28.        private void timer1_Tick(object sender, System.EventArgs e)
  29.        {
  30.            cambioColor();
  31.            timer1.Stop();
  32.            timer2.Start();
  33.        }
  34.  
  35.        private void timer2_Tick(object sender, System.EventArgs e)
  36.        {
  37.            cambioColor2();
  38.            timer2.Stop();
  39.            timer1.Start();
  40.        }
  41.    }
  42. }

Lo que no me sale, es el label en el centro de la pantalla cuando maximizo automáticamente el formulario.

Saludos.


Título: Re: No funciona el código
Publicado por: Eleкtro en 12 Junio 2018, 13:33 pm
Dos tareas: 1. Leer sobre multi-threading en .NET, programación asincrónica. y 2. usar el componente BackgroundWorker para lo que pretendes hacer (en la MSDN tienes documentación y ejemplos de uso, al igual que para el punto nº1).

Saludos!