ユーザーが選択した大きなファイルを処理しています。私のコードは次のようになります。
if (FileDialog.ShowDialog() == true) {
// process really big file
}
これにより UI がフリーズするため、ユーザーがファイルを選択する前に、最初に読み込みメッセージを表示して、何かが起こっていることを視覚的に示すようにしました。
loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) {
// process really big file
}
残念ながら、これでもファイルの処理中に UI が完全にフリーズします。
ファイルを選択した直後に MessageBox を起動すると、完全に機能することがわかりました。ランタイムでイベント/UIアイテムをフラッシュするために、フードの下で「DoEvents」タイプの呼び出しを行うと思います。
loadingMessage.Visibility = Visibility.Visible;
if (FileDialog.ShowDialog() == true) {
MessageBox.Show("Sync!");
// process really big file
}
このような場合でも、大きなファイルの処理は遅くなりますが、読み込みメッセージが表示され、画面の UI が同期されます (待機カーソルを表示するなど、実際には他のことを行っています)。
質問:
Silverlight には DoEvents 機能がありません。MessageBox.Show 以外に、UI を同期させ、OpenFileDialog が UI をフリーズするのを防ぐのと同じ効果を持つ呼び出しはありますか?