0

スレッドを含むプログラムを作成しました。パネル付きのボタンがあり、スレッドがパネルにアクセスすると、ボタンの背景色が自動的にピンク色に変わります。ボタンをもう一度押すと、緑色に変わります。私の問題は、スレッドがそのパネルにアクセスすると、ボタンがピンクにならず、デフォルトの色のままです。しかし、クリックすると色が変わります。

これが私がやったことです:-

//これはボタンクリックイベントです

public void btn_Click(object sender, System.EventArgs e)
    {
        locked = !locked; //makes the locked variable true if it is false and vice versa

        this.btn.BackColor = locked ? Color.Pink : Color.Green;

        lock (this)
        {
            if (!locked)
            {
                Monitor.Pulse(this);

            }
        }
    }

これが実行されるコードです。ボタンは自動的にピンクに変わります。

 public void start2()
        {
           Thread.Sleep(delay);


            while (true)
            {


            semaphore.Signal();
            this.ZeroPlane();
            panel.Invalidate();
            buff.read(ref colour, ref status);             

            for (int k = 0; k < 5; k++)
            {
                panel.Invalidate();
                this.movePlane(xDelta, yDelta);
                Thread.Sleep(delay);
                locked = true;
            }

            if (status == "1" || status =="2" || status == "3") //checks whether it has arrived at the destination
            {

                lock (this)
                {
                    while (locked)
                    {
                        Monitor.Wait(this); //keep the plane in the hub  until the button is pressed.
                    }
                }
                semaphore.Wait();

                buff.write(this.colour, this.status); //overwrites the buffer 

                buff.read(ref colour, ref status);



                for (int p = 0; p < 5; p++)
                {
                    this.westEast = true;
                    this.movePlane(0, 20);
                    Thread.Sleep(delay);
                    panel.Invalidate();


                }
                nextSemaphore.Wait();
                nextBuffer.write(this.colour, "0");
                this.colour = Color.Yellow;
                this.status = null;

            }


        }
4

2 に答える 2

0

私は解決策を見つけることができました。変数名を使用して、ボタンの背景色を変更しました。

これが私がしたことです:

         //more code here

         if (status == "1" || status =="2" || status == "3") //checks whether it has arrived at the destination

                   {

                    this.btn.BackColor = Color.Pink; //just change its colour to pink.
                    lock (this)
                    {
                    //rest of the code
于 2013-09-26T11:15:33.793 に答える