Я создал программу, которая содержит потоки. Есть кнопка с панелью, когда к панели обращается поток, кнопка должна автоматически изменить свой цвет фона на розовый. При повторном нажатии кнопки она должна стать зеленой. Моя проблема в том, что когда поток обращается к этой панели, кнопка не становится розовой, она остается в своем цвете по умолчанию. Но когда я нажимаю, он меняет цвет.
Вот что я сделал: -
// это событие нажатия кнопки
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;
}
}