2010-03-19 87 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

相关问题