如何从Socket.BeginRecieve更新C#wpf ComboBox?

时间:2011-04-09 01:12:57

标签: c# .net multithreading data-binding combobox

我有一个Wpf ComboBox数据绑定到一个ObservableCollection,它需要从Socket类中的异步函数BeginRecieve更新。我知道当执行异步函数时,它位于一个新线程中,您无法通过其他线程更新主GUI控件。有人可以举个例子说明如何实现这一目标吗?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您无法从另一个线程更改集合的内容,您需要在调度程序线程上执行此操作。所以,而不是:

collection.Add(item);

这样做:

Dispatcher.Invoke(new Action(() => collection.Add(item)));

另一种选择是使用在调度程序线程上引发CollectionChanged事件的集合。我发布了一个示例here