私のアプリケーションでは、TabItemを読み込むときにパフォーマンスに問題があります(各TabItemはViewModelにバインドされ、各ViewModelにはDataTemplateがあります)。この問題を解決するために、私はViewModelにコンストラクタでの非同期読み込みを使用します。このソリューションにより非同期の最初のTabItemの読み込みでのパフォーマンスの問題
public MyViewModel(MyObject entity)
{
// WpfContext it's my Dispatcher
Task.Factory.StartNew(() => WpfContext.Invoke(() =>
{
//Initialisation
LoadMyObject(entity);
}));
}
を、のTabItemがロードされる最初の時間は、それはいくつかの時間がかかり、実際には非同期ではないようです。その他の負荷では、正常に動作し、非同期に動作します。なぜ私は正確に分からない。なにか提案を ?
"あなたのLoadMyObjectをリファクタリングする必要があるかもしれません"とはどういう意味ですか? Task.Factory.StartNewを使用してLoadMyObjectを呼び出すためのバックグラウンドタスクを作成するとき、何も変更されませんでした...私もBeginInvokeを試しましたが、TabItemは空のままです。 – rad
私は 'LoadMyObject'が実際に何をしているのか分からないので、長時間実行していたメソッドであると仮定して、新しいデータをレンダリングするためにWPFに表示を更新させるイベントを発生させました。私はあなたがバックグラウンドスレッドで長時間実行されている部分を実行するためにこれをリファクタリングできると思っていましたし、必要なときだけUIに呼び出します。今すぐタスクを開始しても何も変更されません。なぜなら、すぐにUIスレッドに戻る「Invoke」をすぐに呼び出すからです。 – davisoa