Winforms StatusStrip - 为什么我更新它时会出现空白?

时间:2010-03-19 05:17:51

标签: winforms statusstrip toolstripstatuslabel

背景:我有一个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();
}

这有帮助吗?

1 个答案:

答案 0 :(得分:1)

原因可能在于此函数的调用者。如果从另一个线程调用它,请使用Control.BeginInvoke而不是直接调用。如果在长处理期间从主应用程序线程调用它,请在UpdateStatusStrip调用后尝试Application.DoEvents。