В настоящее время я пишу приложение на 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";
}
You» повторно блокируя поток пользовательского интерфейса и, по сути, блокируя вашу программу в первом случае. Когда вы показываете «MessageBox», вы временно приостанавливаете выполнение кода, позволяя обновлять ярлык и показывать текущий текст. Вы можете подумать только о том, чтобы использовать ProgressBar, а затем запускать его перед циклом и останавливать его после цикла. –
Спасибо, я не понимал, что это произойдет. Я предположил, что, поскольку текст обновляется в цикле, он обновляет его до следующей итерации. – FMC
«Фактическое здание XML выполняется в другом потоке» ... но я подозреваю, что циферблат 'while' показан в основном опросе потока пользовательских интерфейсов для завершения другого потока? Если это так, то это отклоняет весь смысл использования другого потока в первую очередь. –