ПРЕДПОСЫЛКИ: У меня есть приложение WindowForms v3.5 с набором StatusStrip, который будет использоваться как TooStripStatusLabel. У меня много обновлений для нее во время выполнения задачи, однако есть заметные периоды, когда она BLANK. Нет точек, когда я пишу пробел на этикетке с полосой статуса.Winforms StatusStrip - почему существуют периоды, когда он пуст, когда я его обновляю?
ВОПРОС: Любые идеи, почему я буду видеть период, когда метка полосы состояния не заполнена, когда я не ожидаю, что это будет?
Как обновить:
private void UpdateStatusStrip(string text)
{
toolStripStatusLabel1.Text = text;
toolStripStatusLabel1.Invalidate();
this.Update();
}
PS. Вызов Application.DoEvents() после этого.Update(), похоже, не помогает. Я на самом деле звоню это с помощью управления 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);
}
(е) и снова статус обновления полосы
private void UpdateStatusStrip(string text)
{
toolStripStatusLabel1.Text = text;
toolStripStatusLabel1.Invalidate();
this.Update();
}
Поможет ли это?
У меня есть нечто похожее. Похоже, на ярлыке отображается пустое значение, когда текст слишком длинный для метки. Пока не уверен в обходном пути. – 2012-03-06 13:17:05