No funciona el código

Iniciado por Meta, 8 Junio 2018, 04:39 AM

0 Miembros y 1 Visitante están viendo este tema.

Meta

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 (csharp) [Seleccionar]
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

namespace Apruebalos_a_todos_cs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            while (true)
            {
                cambioColor();
                Thread.Sleep(500);
                cambioColor2();
                Thread.Sleep(500);
            }
        }

        void cambioColor()
        {
            this.BackColor = Color.Black; // Formulario negro.
            //this.ForeColor = Color.White; // Cambia textos en blanco.
            label1.ForeColor = Color.White;
        }

        void cambioColor2()
        {
            this.BackColor = Color.White; // Formulario blanco.
            //this.ForeColor = Color.Black; // Cambia textos en negro.
            label1.ForeColor = Color.Black;
        }
    }
}


¿Qué hago mal?

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

srWhiteSkull

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

Meta

Ya me salió.

Código (csharp) [Seleccionar]
using System.Drawing;
using System.Windows.Forms;

namespace Apruebalos_a_todos_cs
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            timer1.Start();
        }

        void cambioColor()
        {
            this.BackColor = Color.Black; // Formulario negro.
            //this.ForeColor = Color.White; // Cambia textos en blanco.
            label1.ForeColor = Color.White;
        }

        void cambioColor2()
        {
            this.BackColor = Color.White; // Formulario blanco.
            //this.ForeColor = Color.Black; // Cambia textos en negro.
            label1.ForeColor = Color.Black;
        }

        private void timer1_Tick(object sender, System.EventArgs e)
        {
            cambioColor();
            timer1.Stop();
            timer2.Start();
        }

        private void timer2_Tick(object sender, System.EventArgs e)
        {
            cambioColor2();
            timer2.Stop();
            timer1.Start();
        }
    }
}


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

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Eleкtro

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!