2014-12-29 2 views
0

В настоящее время я пишу приложение на C#, которое обрабатывает некоторые XML среди прочего. Некоторые из документов XML могут быть довольно большими, поэтому я добавил в метку, чтобы показать пользователю, что символы все еще обрабатываются и что приложение все еще работает.Win form application not update label

Фактическое здание XML выполняется в другом потоке, но XMLInProg и charsProcessed являются переменными класса, которые основной поток может видеть и использовать для обновления графического интерфейса.

По какой-то странной причине я могу получить только метку статуса, когда я получаю всплывающее окно с обновлением. Может ли кто-нибудь объяснить, почему?

Спасибо.

Это не работает ...

while (XMLInProg) 
     { 
      status.Text = "Building XML... " + charsProcessed + " characters processed"; 
     } 

Но это будет работать

while (XMLInProg) 
     { 
      MessageBox.Show("Works now"); 
      status.Text = "Building XML... " + charsProcessed + " characters processed"; 
     } 
+1

You» повторно блокируя поток пользовательского интерфейса и, по сути, блокируя вашу программу в первом случае. Когда вы показываете «MessageBox», вы временно приостанавливаете выполнение кода, позволяя обновлять ярлык и показывать текущий текст. Вы можете подумать только о том, чтобы использовать ProgressBar, а затем запускать его перед циклом и останавливать его после цикла. –

+0

Спасибо, я не понимал, что это произойдет. Я предположил, что, поскольку текст обновляется в цикле, он обновляет его до следующей итерации. – FMC

+0

«Фактическое здание XML выполняется в другом потоке» ... но я подозреваю, что циферблат 'while' показан в основном опросе потока пользовательских интерфейсов для завершения другого потока? Если это так, то это отклоняет весь смысл использования другого потока в первую очередь. –

ответ

2

Вызвать метод обновления на этикетке (в пределах цикла):

status.Refresh() 
+0

upvoter это действительно работает ?. поток заморожен! –

+0

Да, это работает, я предполагаю, что теперь он заставляет ярлык обновляться, прежде чем он перейдет на следующую итерацию. – FMC

+0

@FearghalConn хорошо, если это ответ, тогда примите его – prospector