【发布时间】:2009-11-24 18:52:26
【问题描述】:
我正在尝试创建一个自定义的内部应用程序,该应用程序将访问通过 UDP 广播其名称和 IP 地址的其他内部系统。我正在尝试创建一个多线程对话框,该对话框每 500 毫秒轮询一次 UDP 消息,持续 15 秒,解析 UDP 消息,然后将检测到的系统的名称添加到对话框中的 ListBox 中,实时更新它。我已经测试并完成了 UDP 扫描代码,唯一的问题是跨线程更新 ListBox。每当我尝试访问 ListBox 的 Items 或 ItemSource 属性时,都会收到 System.InvalidOperationException :“调用线程无法访问此对象,因为不同的线程拥有它。”
相关的堆栈跟踪部分:
at System.Windows.Threading.Dispatcher.VerifyAccess()
at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
at System.Windows.Controls.ItemsControl.set_ItemsSource(IEnumerable value)
无论我使用的是 ObservableCollection(我知道,与集合类型无关)、HashSet 还是任何其他对象,都会发生这种情况。任何人都可以帮助我跨不同线程访问 GUI 吗?
【问题讨论】:
标签: c# wpf multithreading