110,538
社区成员
发帖
与我相关
我的任务
分享
private void startChange()
{
Thread threadChange = new Thread(new ThreadStart(changeLight));
threadChange.Start();
}
private void changeLight()
{
bool light = true;
while (light)
{
if (zuol1.BackColor == Color.White)
{
zuol1.BackColor = Color.Green;
Thread.Sleep(100);
}
else if (zuol1.BackColor == Color.Green)
{
zuol1.BackColor = Color.Red;
Thread.Sleep(100);
}
else
{
zuol1.BackColor = Color.White;
Thread.Sleep(100);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
startChange();
}
this.Invoke(new MethodInvoker(() =>
{
while (light)
{
if (zuol1.BackColor == Color.White)
{
zuol1.BackColor = Color.Green;
Thread.Sleep(100);
}
else if (zuol1.BackColor == Color.Green)
{
zuol1.BackColor = Color.Red;
Thread.Sleep(100);
}
else
{
zuol1.BackColor = Color.White;
Thread.Sleep(100);
}
}
}));
Invoke((MethodInvoker)(() =>
{
while (light)
{
if (zuol1.BackColor == Color.White)
{
zuol1.BackColor = Color.Green;
Thread.Sleep(100);
}
else if (zuol1.BackColor == Color.Green)
{
zuol1.BackColor = Color.Red;
Thread.Sleep(100);
}
else
{
zuol1.BackColor = Color.White;
Thread.Sleep(100);
}
}
}));
private void changeLight()
{
bool light = true;
while (light)
{
Color newColor=Color.Green;
if (zuol1.BackColor == Color.White)
{
newColor = Color.Green;
}
else if (zuol1.BackColor == Color.Green)
{
newColor= Color.Red;
}
else
{
newColor= Color.White;
}
this.Invoke(Action(() =>
{
zuol1.BackColor=newColor;//只在需要操作界面的时候才用invoke/begininvoke
Thread.Sleep(300);//时间过短,有可能导致时间占用太多。因为Invoke本质上是由主线程的执行的
}));
}
}
private void changeLight()
{
bool light = true;
while (light)
{
this.Invoke(new MethodInvoker(() =>
{
if (zuol1.BackColor == Color.White)
{
zuol1.BackColor = Color.Green;
Thread.Sleep(100);
}
else if (zuol1.BackColor == Color.Green)
{
zuol1.BackColor = Color.Red;
Thread.Sleep(100);
}
else
{
zuol1.BackColor = Color.White;
Thread.Sleep(100);
}
}));
}
}
CheckForIllegalCrossThreadCalls = false;
或
Invoke((MethodInvoker)(() => {//更改颜色的代码 }));