Я обрабатываю большие файлы после того, как они выбраны пользователем. Мой код выглядит следующим образом:
if (FileDialog.ShowDialog() == true) {
// process really big file
}
Это замораживает пользовательский интерфейс, поэтому я попытался отобразить сообщение о загрузке, прежде чем пользователь выбрал файл, чтобы дать ему визуальную подсказку о том, что что-то происходит:
loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) {
// process really big file
}
К сожалению, это все еще полностью замораживает пользовательский интерфейс во время обработки файла.
То, что я нашел, работает отлично, если я запускаю MessageBox сразу после выбора файла. Я думаю, что он выполняет вызов типа «DoEvents» изнутри, чтобы получить элементы события / пользовательского интерфейса сброса во время выполнения.
loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) {
MessageBox.Show("Sync!");
// process really big file
}
В подобных случаях большой файл все еще обрабатывается так же медленно, но отображается сообщение о загрузке, и экранный интерфейс синхронизируется (в реальной жизни я делаю некоторые другие вещи, такие как показ курсора ожидания).
Вопрос:
Silverlight не имеет функциональности DoEvents. Есть ли еще какой-то вызов, который я могу сделать, кроме MessageBox.Show для того же эффекта синхронизации интерфейса пользователя и предотвращения его зависания OpenFileDialog?