2016-03-15 56 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((=)=> {}))...但在這種情況下,您必須使用調度程序才能將值分配給控件(或其他例外)

相關問題