ObservableCollection
を更新しています.NET のワーカー スレッドから ObservableCollection
を直接変更すると、多くの場合例外が発生します。 これは、ObservableCollection
がスレッドセーフではないためです。複数のスレッドが同時にアクセスすると、予期しない動作が発生する可能性があります。
.NET 4.5 以降のバージョンでは、BindingOperations.EnableCollectionSynchronization
を使用した便利なソリューションが提供されます。このメソッドは、UI 更新のためのスレッド同期を簡素化します:
BindingOperations.EnableCollectionSynchronization(myCollection);
この 1 行で次のことが実現されます。
ObservableCollection
( myCollection
) を UI スレッドにリンクし、CollectionChanged
イベントが UI スレッドで処理されるようにします。BindingOperations.EnableCollectionSynchronization
は UI スレッドの同期を処理しますが、ObservableCollection
は本質的にスレッドセーフではないことに注意してください。 堅牢なスレッドの安全性を確保するため、バックグラウンド スレッドからコレクションを直接変更する場合は、常にロックを使用してください:
<code class="language-csharp">lock (myCollection) { // Modify myCollection here (e.g., Add, Remove, etc.) }</code>
BindingOperations.EnableCollectionSynchronization
を適切なロックと組み合わせることで、UI スレッドの整合性を損なうことなく、ワーカー スレッドから ObservableCollection
を安全かつ効率的に更新できます。
以上が.NETのワーカースレッドからの観測可能な収集を安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。