Текстовое поле не обновляется в цикле for - PullRequest
0 голосов
/ 18 октября 2011

У меня есть цикл for в моем WPF. Текстовое поле не обновляется, пока цикл не завершится.

Мой код:

for (int i = 0; i < 10; i++)
{
    Thread.Sleep(1500);
    // MessageBox.Show(i.ToString());
    updateTextBox(i);
}

Функция обновления:

private void updateTextBox(int i)
{
    // MessageBox.Show("reached here:" + i.ToString());
    txtExecLog.AppendText("\n" + i.ToString());
 }

Если я раскомментирую текст сообщения, он обновляется один за другим, в противном случае он обновляет через 15 секунд (1.5*10) текстовое поле со всеми значениями.

Ответы [ 2 ]

2 голосов
/ 18 октября 2011

Вы выполняете свой цикл в потоке пользовательского интерфейса.Когда вы вызываете Thread.Sleep (), поток пользовательского интерфейса спит, и поэтому текстовое поле не может быть обновлено до завершения блокировки потока пользовательского интерфейса для цикла.

2 голосов
/ 18 октября 2011

Вы блокируете поток пользовательского интерфейса, когда спите.Вы не должны этого делать - ничто не может быть обработано в потоке пользовательского интерфейса, пока вы спите.Если вы хотите периодически выполнять действие (в потоке пользовательского интерфейса), используйте DispatcherTimer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...