重い作業はバックグラウンド スレッドにプッシュする必要があります。現在起こっていることは、作業が UI スレッドで行われているということです。UI スレッドは作業が完了するのを待っているため、「フリーズ」します。作業をバックグラウンド スレッドにプッシュするには、さまざまな方法があります。1 つの方法は、BackgroundWorkerを使用することです。
作業完了時の報告などを含まない単純な例は、次のようになります。
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(BW_DoWork);
bw.RunWorkerAsync();
private void BW_DoWork(object sender, DoWorkEventArgs e)
{
//Your heavy work code
}
バックグラウンド スレッドで作業するときに覚えておくべき重要なことは、UI で何かを変更したい場合は、データを UI スレッドにマーシャリングし、そこで更新する必要があるということです。次のようにできます。
Deployment.Current.Dispatcher.BeginInvoke(() => {
myTextBlockExample.Text = "Changing the UI";
}
メソッドTextBlock
なしでを変更しようとすると、エラーが発生します。WP 開発でそのエラーが表示される場合は、非 UI スレッドから UI 要素を更新しようとしている可能性があります。Dispatcher.BeginInvoke
Invalid Cross-Thread Access
を呼び出す前に、読み込み中の画像を表示するコードを配置できますbw.RunWorkerAsync
。