在用户选择大文件后,我正在处理它们。我的代码如下所示:
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 相同的效果吗?