es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Editar propiedades de un objeto Graphics en C#.

Actualmente estoy intentando implementar colores alternos utilizando Threads para un objeto Graphics en un formulario de Windows en C#.

El código para dibujar una línea funciona de la siguiente manera:

public void DrawLine(int toX, int toY) // dibujar línea
{
    g.DrawLine(currPen, xPos, yPos, toX, toY);
    xPos = toX;
    yPos = toY;
}

Las variables asignadas en la parte superior de la clase Canvass son las siguientes:

Graphics g;
public static Pen Red, Blue, Green, redGreen;
public static int xPos, yPos;
public static Pen currPen;
public static Thread newThread;
public static bool flag = false;
public static bool running = false;

El método del hilo hasta ahora cambia el color del cuadro que se utilizará para activar los colores intermitentes (Este método se encuentra actualmente dentro de otra clase y se interactuará con static void en la clase Canvass):

private void pictureBox6_Click(object sender, EventArgs e)
{
    running = !running;
}

public void redgreenMethod()
{
    while (true)
    {
        if (running != true) continue;
        if (flag == false)
        {
            flag = true;
            pictureBox6.BackColor = Color.Red;
        }
        else
        {
            pictureBox6.BackColor = Color.Green;
            flag = false;
        }
        Thread.Sleep(500);
    }
}

Mi problema es que no estoy muy seguro de cómo implementar el threading en una línea en el lienzo Graphics. Como se puede ver en el método de Threads, interactúa con el color de fondo de un pictureBox, mientras que este tipo de propiedad no está disponible para una línea que se está dibujando.

¿Cómo debo abordar esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para implementar colores alternados utilizando hilos para un objeto gráfico en un formulario de Windows en C#, puedes crear un hilo separado para cambiar el color del lápiz que se utiliza en el método DrawLine.

    Para hacer esto, puedes pasar el objeto Graphics y los objetos Pen al hilo, y utilizar un bucle while para llamar continuamente al método DrawLine con colores alternados de Pen.

    Aquí tienes un ejemplo de implementación:

    public void CambiarColoresLinea(Graphics g, Pen[] pens)
    {
        int index = 0;
        while (true)
        {
            g.DrawLine(pens[index], xPos, yPos, xPos + 50, yPos + 50);
            xPos += 50;
            yPos += 50;
            index = (index + 1) % pens.Length;
            Thread.Sleep(500);
        }
    }
    

    En esta implementación, el método recibe el objeto Graphics y un array de objetos Pen para alternar entre ellos. El método llama continuamente al método DrawLine con el objeto Pen actual y actualiza las variables xPos e yPos para seguir dibujando la línea.

    Para iniciar el hilo, puedes llamar al siguiente código en el formulario principal:

    Thread nuevoHilo = new Thread(() => CambiarColoresLinea(g, new Pen[] {Rojo, Azul, Verde}));
    nuevoHilo.Start();
    

    Esto crea un nuevo hilo que llama al método CambiarColoresLinea con el objeto Graphics y un array de objetos Pen para alternar entre ellos.

    Ten en cuenta que esta implementación asume que las variables xPos e yPos se actualizan fuera de este método para reflejar la posición actual de la línea en el lienzo.

Comments are closed.