WPF での ObservableCollection のスレッドセーフな変更
WPF で ObservableCollection
を使用する場合、スレッドの安全性を維持することが重要です。適切な同期を行わずにワーカー スレッドから ObservableCollection
を変更しようとすると、例外が発生します。
ワーカー スレッドから ObservableCollection
を変更するには、UI スレッド で メソッドを BindingOperations.EnableCollectionSynchronization
使用する必要があります。このメソッドは次の手順を実行します:
CollectionChanged
イベントのディスパッチャーとして指定し、イベントが UI スレッドで処理されるようにします。 スレッドセーフなコレクションを正しく処理する手順:
lock
ステートメントを使用するか、カスタム同期メカニズムを使用するかを決定します。 EnableCollectionSynchronization
の適切なオーバーロードを呼び出します。 lock ステートメントの使用例:
<code class="language-csharp">public class ViewModel { private readonly ObservableCollection<Item> _items; public ViewModel() { _items = new ObservableCollection<Item>(); BindingOperations.EnableCollectionSynchronization(_items, new object()); } public void UpdateCollection() { var worker = new Thread(() => { lock (_items) { _items.Add(new Item()); } }); worker.Start(); } }</code>
これらの手順を実装すると、データの整合性に影響を与えることなく、ワーカー スレッドから ObservableCollection
を安全に更新できます。
以上がWPF で ObservableCollections のスレッドセーフな変更を確実に行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。