2010-03-19 77 views
0

背景:我有一個WindowForms v3.5應用程序,設置了一個StatusStrip作爲TooStripStatusLabel。在正在運行的任務期間,我會對其進行相當多的更新,但是有一段時間它是空白的。當我爲狀態條標籤寫入空白時,沒有任何問題。Winforms StatusStrip - 當我更新它時,爲什麼會出現空白?

問題:任何想法爲什麼我會看到期間狀態欄標籤是空白的,當我不指望它是?

我如何更新:

private void UpdateStatusStrip(string text) 
    { 

     toolStripStatusLabel1.Text = text; 
     toolStripStatusLabel1.Invalidate(); 
     this.Update(); 
    } 

PS。在this.Update()之後調用Application.DoEvents()似乎沒有幫助。我其實通過BackgroundWorker的控制調用這個,所以:

(一)我啓動的背景工人:

private void Sync_Button_Click(object sender, EventArgs e) 
    { 
     backgroundWorker1.RunWorkerAsync(); 
     DisableUpdateButtons(); 
    } 

(二)背景工人呼籲更新:

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) 
{ 
    backgroundWorker1.ReportProgress(1, "Example string"); 
    MainForm.MyC.SyncFiles(sender); 
} 

( c)MyC業務類也使用它,例如

public void SyncFiles(object sender) 
{ 
    BackgroundWorker bgw = (System.ComponentModel.BackgroundWorker) sender; 
    bgw.ReportProgress(1, "Starting sync..."); 
. 
. 
. 
} 

(d)本次活動將它拾起:

private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) 
    { 
     UpdateStatusStrip((string)e.UserState); 
    } 

(E)和再次更新狀態條

private void UpdateStatusStrip(string text) 
{ 
    toolStripStatusLabel1.Text = text; 
    toolStripStatusLabel1.Invalidate(); 
    this.Update(); 
} 

這是否幫助?

+1

我有類似的東西。當標籤的文字太長時,標籤顯示爲空白。還不確定是否有解決方法。 – 2012-03-06 13:17:05

回答

1

原因可能在於此函數的調用者。如果從另一個線程調用它,請使用Control.BeginInvoke而不是直接調用。如果您在長時間處理期間從主應用程序線程調用它,請在UpdateStatusStrip調用後嘗試Application.DoEvents。

+0

謝謝 - 我已經添加了一些關於如何使用它的更清晰的內容 - 是否需要「Control.BeginInvoke」?如果是的話,我會把它放在哪裏?我在UpdateStatusStrip調用之後嘗試了「Application.DoEvents」,但這沒有幫助 – Greg 2010-03-19 06:32:21

相關問題