0

私は Windows Phone アプリ開発の初心者です。私のページの 1 つに、かなりの量の作業を行うボタンがあります。そのため、ボタンを押すと画面がフリーズし、すべての作業が完了すると再開します。ここで、この間に表示される待機中の画像またはページを表示したいと思いました。

そのため、ボタンクリックアクションの開始時と終了時にそれぞれページの上部に画像を作成して破棄しましたが、それでもフリーズし、すべての作業が完了した後にのみ画面がレンダリングされ、無関心になります。Silverlite C# を使用しています。

4

1 に答える 1

2

重い作業はバックグラウンド スレッドにプッシュする必要があります。現在起こっていることは、作業が 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.BeginInvokeInvalid Cross-Thread Access

を呼び出す前に、読み込み中の画像を表示するコードを配置できますbw.RunWorkerAsync

于 2012-10-07T14:51:43.937 に答える