一个接一个地改变标签的颜色

时间:2016-03-15 10:35:54

标签: c# winforms

我有一个带有一些标签的窗口。我希望标签的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...
    }

我希望标签一个接一个地改变颜色以显示进度。 但是现在颜色变化仅在方法结束时生效。所以所有标签都会同时改变颜色。

这是为什么?我可以改变什么来获得预期的效果?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

像BugFinder所说...在不同的线程上运行该方法(Task.RunAsync(()=> {}))...但是在这种情况下你必须使用一个调度程序来分配值控件(或其他例外)