Обновление toolStripStatusLabel немедленно

У меня есть программа WinForms, которая имеет button, statusStripи toolStripStatusLabel в этом statusStrip, Если я нажимаю на кнопку, и это работает:

private void button1_Click(object sender, EventArgs e)
{
    toolStripStatusLabel1.Text = "Test";

    System.Threading.Thread.Sleep(5000);
}

Тогда toolStripStatusLabelТекст не обновляется до тех пор, пока не закончится спящий поток. Как мне заставить его обновиться сразу, потом спит нить?

5 ответов

Решение

Как сказал P. Kouvarakis, решение было следующим:

toolStripStatusLabel1.Text = "Test";
statusStrip1.Update();
System.Threading.Thread.Sleep(5000);

Изменение метки состояния не отображалось во время выполнения, когда для полосы состояния Spring было установлено значение true. Я установил для Spring значение false, и он начал отображаться.

  1. Вам нужно добавить текстовую метку StatusStrip (как дочерний элемент) (потому что вы не можете манипулировать текстом родительского компонента), как на этом дочернем компоненте изображения

  2. Когда вы дважды щелкаете по компоненту statusstrip, вы увидите следующее изображение с двумя щелчками мыши.

НЕ добавляйте сюда код изменения текста, потому что он будет обновлен только после щелчка по нему (как вы можете видеть на картинке - statusStrip1_ItemClicked), поэтому любой statusStrip1.Update(); this.Update(); и т. д. не могут вам помочь.

  1. Как сделать это быстро. Вы можете добавить «если» там, где началось целевое условие, как в этом изображения примере«если»
toolStripStatusLabel1.Text = "Test";
Application.DoEvents();

Последнее решение с Application.DoEvents() лучший. Application.DoEvents() должно быть добавлено к каждому изменению StatusStrip:

private void SetParseStatus(object sender, ParseStatusChangedEventArgs e)
{
    toolStripProgressBar1.Value = e.Percent;
    Application.DoEvents();
}
Другие вопросы по тегам