我有一个包含按钮的表单,我试图从不同类别(从黄色到红色)的不同线程更改按钮的颜色,但颜色保持不变。
创建对象(这是在form1中):
Button b = new Button();
b.Location = new Point(gameBoard[playerPosX,playerPosY].m_lbl.Location.X, gameBoard[playerPosX, playerPosY].m_lbl.Location.Y);
b.Parent = gameBoard[playerPosX, playerPosY].m_lbl;
b.BackColor = Color.Black;
b.Size = new Size(17, 17);
b.FlatStyle = FlatStyle.Flat;
b.Enabled = false;
b.Text = "BASIC";
this.Refresh();
b.BringToFront();
buildings.Add(new Structure("basic", b,playerPosX,playerPosY));
Controls.Add(buildings[buildings.Count - 1].m_btn);
这是对象线程正在执行的方法:
public void basicOperation()
{
while (true)
{
Form1.ChangeControlColor(Color.Yellow,m_btn);
Thread.Sleep(1000);
Form1.ChangeControlColor(Color.Red,m_btn);
}
}
这里是form1.ChangeControlColor:
delegate void SetColorCallBack(Color c,Button b);
public static void ChangeControlColor(Color c,Button b)
{
if (b.InvokeRequired)
{
SetColorCallBack d = new SetColorCallBack(ChangeControlColor);
b.Invoke(d, new object[] { c,b });
}
else
{
b.BackColor = c;
b.BringToFront();
b.Refresh();
}
}
以下代码不起作用,按钮的颜色保持黄色。 我很感激你的时间。
答案 0 :(得分:2)
Eliran,
您的多线程代码似乎没问题。
因为将颜色设置为红色和黄色之间没有延迟,所以您可能看不到黄色以外的其他颜色。
尝试在设置黄色和红色之间添加延迟:
while (true)
{
Form1.ChangeControlColor(Color.Yellow,m_btn);
Thread.Sleep(500);
Form1.ChangeControlColor(Color.Red,m_btn);
Thread.Sleep(500);
}
此致