私のWPFアプリでは、UIスレッドで高価な操作を実行する必要があり(それを呼び出しましょうExpensiveUIOperation())、進行状況を追跡するためにUIを最新の状態に保ちたいと思います。
進行状況を追跡するために、プロパティが整数の依存関係プロパティにバインドされているTextBlock、があります。の間に、必要に応じての値を設定するだけです。TextPercentageCompleteExpensiveUIOperation()PercentageComplete
これで、スレッドについて十分に理解しました。UIスレッドを実行ExpensiveUIOperation()しただけでは、UIスレッドがブロックされ、インターフェイスの更新が停止するため、TextBlockが最新の状態に保たれていないように見えます。
そして、私は次のように非同期でそれを行うことができると思いました:
Dispatcher.BeginInvoke(new Action(ExpensiveUIOperation), DispatcherPriority.Background);
しかし、それはまだ機能していません。操作が完了するまで、テキストブロックは視覚的に更新されません。
これを行う方法はありますか?
残念ながら、この状況では、操作でUIスレッドが所有するオブジェクトを多用するため、バックグラウンドスレッドを使用できません。