在用户选择大文件后,我正在处理它们。我的代码如下所示:
if (FileDialog.ShowDialog() == true) {
// process really big file
}
这会冻结UI,因此在用户选择文件之前,我尝试先显示加载消息,以向他们提供发生了什么事情的视觉提示:
loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) {
// process really big file
}
不幸的是,在处理文件时,这仍然会完全冻结UI。
我发现,如果我在选择文件后立即启动MessageBox,效果会非常好。我认为它在后台执行“DoEvents”类型的调用,以在运行时获取刷新事件/ui项。
loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) {
MessageBox.Show("Sync!");
// process really big file
}
在这种情况下,大文件的处理速度仍然很慢,但会显示加载消息,屏幕UI也会同步(我正在做一些其他事情,比如显示等待光标)。
问题:
Silverlight没有DoEvents功能。除了MessageBox.Show之外,我还可以调用它来同步UI并防止OpenFileDialog冻结UI吗?