0

背景:我有一个 WindowForms v3.5 应用程序,其 StatusStrip 设置用作 TooStripStatusLabel。在正在运行的任务期间,我对其进行了很多更新,但是在明显的时间段内它是空白的。当我在状态条标签上写一个空白时,也没有任何意义。

问题:任何想法为什么我会看到状态条标签为空白的时期,而我不希望它是?

我如何更新它:

    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();
}

这有帮助吗?

4

1 回答 1

1

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

于 2010-03-19T05:31:18.003 回答