我有一个带有一些标签的窗口。我希望标签的BackColor根据我正在运行的一些测试而改变:
private void btnStartTest_Click(object sender, EventArgs e)
{
if(Tests.FirstTest())
{
this.lblFirstTest.BackColor = Color.LawnGreen;
}
else
{
this.lblFirstTest.BackColor = Color.Red;
}
if(Tests.SecondTest())
{
this.lblSecondTest.BackColor = Color.LawnGreen;
}
else
{
this.lblSecondTest.BackColor = Color.Red;
}
//and so on...
}
我希望标签一个接一个地改变颜色以显示进度。 但是现在颜色变化仅在方法结束时生效。所以所有标签都会同时改变颜色。
这是为什么?我可以改变什么来获得预期的效果?
答案 0 :(得分:3)
每次换色后在表单上执行Refresh
。这应该强制更新和重新绘制视觉元素,从而产生所需的效果。这是不涉及线程的最简单方法。
答案 1 :(得分:0)
像BugFinder所说...在不同的线程上运行该方法(Task.RunAsync(()=> {}))...但是在这种情况下你必须使用一个调度程序来分配值控件(或其他例外)