最近、PCL ListViewで無限スクロール/遅延ロードを実装する必要がありました。これは、Android上で正常に動作するように見えますが、iOSの上で、私は特に範囲の例外のうち、取得保管Xamarinフォーム:ObservableCollectionは常にUIスレッドで設定/更新する必要がありますか?
var countries = // get countries
foreach (var country in countries)
{
// Countries is an ObservableCollection<Country>
Countries.Add(country);
}
を
のViewModel
:私は、コードの大部分を省略しますが、最も重要な部分でした私はリストをすばやくスクロールしました。私のための修正プログラムは、メインのUIスレッドでこのコードを実行することでした。// wrap the code with this
Device.BeginInvokeOnMainThread(async() => {});
私の質問は、観察可能なコレクションを更新または設定するすべてのモデルサービスコールを常にUIスレッドで実行する必要がありますか?
を設定したコマンドがあります。Countries
です。彼らはUIスレッドブロックなしで正常に動作するようです。私はに上記のようにの項目を追加するだけの問題がありました。
ObservableCollectionをUIスレッドで常に設定して更新する必要がありますか?
ありがとうございました。 Xamarinがスレッド切り替えを処理する場合、なぜスレッドセーフなObservableCollectionを使用する必要がありますか? – Mark13426
**あなた**は別のスレッドから変更する可能性があるためです。 – nicks
Xamarinは、UIスレッド上で(VMの変更に基づいて)UIオブジェクトを更新することが保証されています。同じスレッドでVMを更新するか、スレッドセーフなオブジェクトを使用するかはあなた次第です。 – nicks