我正在尝试创建一个自定义的内部应用程序,该应用程序将访问通过UDP广播其名称和IP地址的其他内部系统。我试图创建一个多线程对话框,每隔500毫秒轮询UDP消息15秒,解析UDP消息,然后将检测到的系统的名称添加到对话框中的列表框中,实时更新它。我已经测试并完成了UDP扫描代码,唯一的问题是跨线程更新ListBox。任何时候我尝试访问ListBox的Items或ItemSource属性时,都会得到System.InvalidOperationException:“调用线程无法访问此对象,因为不同的线程拥有它。”多线程访问C#中的WPF GUI#
相关的堆栈跟踪部分:
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吗?
哇,这是一个非常有用的答案,它做到了。非常感谢。如果可以的话,我可以多投一遍你的答案。 – 2009-11-24 19:52:48
另请注意,您也可以使用Dispatcher.BeginInvoke/EndInvoke模式异步调度回UI线程 – 2009-11-26 00:52:44