2016-03-15 30 views
1

我有一个带有一些标签的窗口。我希望标签的背景色,取决于我运行一些测试的更改:一个接一个地改变标签的颜色

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

如果你的UI线程有很长的运行时间,比如你的测试,你的UI线程将会挂起。所以你的代码没有机会绘制更新。 – BugFinder

回答

3

每次颜色更改后在窗体上执行Refresh。这应该强制更新和重绘视觉元素,从而产生期望的效果。这是不涉及线程的最简单的方法。

0

Like BugFinder said ...在不同的线程上运行该方法(Task.RunAsync((=)=> {}))...但在这种情况下,您必须使用调度程序才能将值分配给控件(或其他例外)

相关问题