背景:我有一个WindowForms v3.5应用程序,其StatusStrip设置为用作TooStripStatusLabel。在正在运行的任务期间,我会对它进行大量更新,但是有一些明显的时间是BLANK。当我在状态条标签上写入空白时,没有任何要点。
问题:任何想法为什么我会看到状态条标签为空白的时间段,当我不期望它时?
我如何更新它:
private void UpdateStatusStrip(string text)
{
toolStripStatusLabel1.Text = text;
toolStripStatusLabel1.Invalidate();
this.Update();
}
PS。在this.Update()之后调用Application.DoEvents()似乎没有帮助。我实际上是通过backgroundworker控件调用它,所以:
(a)我启动后台工作人员:
private void Sync_Button_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
DisableUpdateButtons();
}
(b)后台工作者调用更新:
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();
}
这有帮助吗?
答案 0 :(得分:1)
原因可能在于此函数的调用者。如果从另一个线程调用它,请使用Control.BeginInvoke而不是直接调用。如果在长处理期间从主应用程序线程调用它,请在UpdateStatusStrip调用后尝试Application.DoEvents。