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

发布于 2024-10-31 10:27:38 字数 174 浏览 2 评论 0原文

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

非常感谢您的帮助。

I have a wpf ComboBox databound to an ObservableCollection that needs to be updated from an asynchronous function BeginRecieve, in the Socket class. I know that when the async function is executed it is in a new thread and you cannot update the main GUI controls through other threads. Can someone please give me a example of how this might be accomplished?

Your help is much appreciated thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜妞爱困 2024-11-07 10:27:38

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

collection.Add(item);

这样做:

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

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

You can't change the contents of the collection from another thread, you need to do it on the dispatcher thread. So, instead of this:

collection.Add(item);

Do this:

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

Another option is to use a collection that raises the CollectionChanged event on the dispatcher thread. I posted an example here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文