私はViewModelにスレッド関連の問題がありますが、スレッド関連のようですが、何がうまくいかないのか、私の "修正"がそれをどう修正しているのかは分かりません。MvvmCross ShowViewModelのロードシーケンス
私は、初期データを読み込むために非同期メソッドを呼び出す必要があるViewModelを持っています。 MvvmCrossが自動的に呼び出すInitメソッドから非同期メソッドを呼び出しています。何らかの理由で読み込みに失敗した場合は、エラー画面を表示したいが、Initで呼び出されたメソッドの中でShowViewModelを呼び出すと、期待どおりの結果が得られない。 ShowViewModelは正しく呼び出されますが、デバッガでこれを実行すると、元のViewModel/Viewのロードが完了する前にErrorViewModelが表示され、元のViewModelによって上書きされるためロードされますが表示されません。 MvxTraceログは、ないShowViewModelは、それが初期のViewModelに呼び出された直後にErrorViewModelで呼び出されていることを教え、だけ初期ビューショー
public async Task Init()
{
await LoadInitialDataAsync();
}
protected async Task LoadInitialDataAsync()
{
var loadResult = await LoadSomeStuffAsync();
if (loadResult.IsBadNews)
{
ShowViewModel<ErrorViewModel>();
return;
}
}
:
はここでロードコードの簡易版ですErrorView。
これを「修正」するには2つのうちのいずれかを実行できます。
私はTask.RunでLoadInitialDataAsyncへの呼び出しラップすることができます。これらの変更のどちらかが生成
protected async Task LoadInitialDataAsync()
{
var loadResult = await LoadSomeStuffAsync();
if (loadResult.IsBadNews)
{
await Task.Delay(1);
ShowViewModel<ErrorViewModel>();
return;
}
}
:私は、内側ShowViewModel呼び出しの前にわずかな遅延を追加することができます
await Task.Run(async() =>
{
await LoadInitialDataAsync();
});
かを、目的の結果 - 読み込み中にバッドなことが起こると、ErrorViewModelはそのビューを表示します。
問題は、この修正を信頼できません。なぜなら、わかりやすいことが分からないため、この修正がどれほど堅牢であるかわからないからです。それは、最も不都合な時に、将来、ある時点で再び破る任意のタイミングのようなものです。
誰かがMvvmCrossの内部構造を十分に理解していれば、私はそれを感謝します!
おそらく、この問題を再現するレポ/サンプルを提供できますか?上記の簡略化されたバージョンを使用しても、この問題は発生しません。 – Plac3Hold3r
「答え」の誰も理解できないような、同じ問題を抱えています。問題は、あなたのCOREプロジェクトであなたが待たなければならないタスクがあり、その待ちの間に "ローダー"を表示したいということですか?右?その解決策を見つけましたか? – Ph0b0x