我有一个Wpf ComboBox数据绑定到一个ObservableCollection,它需要从Socket类中的异步函数BeginRecieve更新。我知道当执行异步函数时,它位于一个新线程中,您无法通过其他线程更新主GUI控件。有人可以举个例子说明如何实现这一目标吗?
非常感谢您的帮助。
答案 0 :(得分:1)
您无法从另一个线程更改集合的内容,您需要在调度程序线程上执行此操作。所以,而不是:
collection.Add(item);
这样做:
Dispatcher.Invoke(new Action(() => collection.Add(item)));
另一种选择是使用在调度程序线程上引发CollectionChanged
事件的集合。我发布了一个示例here。