wpf 跨线程访问ObservableCollection
时间: 2023-08-23 09:03:48 浏览: 141
WPF ObservableCollection
4星 · 用户满意度95%
在WPF中,如果你在一个后台线程中更新ObservableCollection,那么你需要使用Dispatcher来将更新操作转移到UI线程。这是因为ObservableCollection是绑定到UI元素上的,而UI元素只能由UI线程更新。
以下是一些示例代码,展示了如何使用Dispatcher来更新ObservableCollection:
```csharp
// 创建一个新的ObservableCollection
ObservableCollection<string> myCollection = new ObservableCollection<string>();
// 在后台线程中添加一个新的元素
Task.Run(() =>
{
// 这里模拟一个耗时的操作
Thread.Sleep(1000);
// 使用Dispatcher将操作转移到UI线程
Application.Current.Dispatcher.Invoke(() =>
{
myCollection.Add("New Element");
});
});
// 在UI线程中绑定ObservableCollection
myListBox.ItemsSource = myCollection;
```
在上面的示例中,我们使用了Task.Run()来模拟一个后台线程。然后,在后台线程中,我们使用了Thread.Sleep()来模拟一个耗时的操作。最后,我们使用了Application.Current.Dispatcher.Invoke()来将添加操作转移到UI线程。
这样,即使我们在后台线程中添加了一个新的元素,它也会自动出现在UI中绑定的ListBox中。
阅读全文