我有线程更新形成控件的场景。我跟着http://msdn.microsoft.com/en-us/library/ms171728.aspx使其工作,但我没有成功。
程序创建表单控件(列表视图),以及从互联网(股票报价)获取信息的线程。每当用户选择其他表单控件中的已知符号(将在listView中添加)时,此实习生会添加到线程以从Internet获取引号,并且将为该特定符号添加委托,线程将遍历所有监视列表符号以每当价格发生变化时,从互联网上获取报价,线程调用已注册的委托。在那个委托我访问listView元素,在这里我遇到问题线程不一致的问题。
为了解决这个问题,我按照上面提到的链接, 方法-1)在代表中我开始了后台工作者。同样的问题 方法-2)主程序创建后台工作程序,此工作程序循环列表以在listView中更新。委托将新的更新价格添加到后台工作程序正在循环的列表中。当后台工作者再次访问listView时,会出现线程不一致的问题。
如何解决此问题?
答案 0 :(得分:1)
当后台工作者再次访问listView时,会出现线程不一致的问题。
是。这是因为不应该这样做。后台工作程序仅提供对 RunWorkerCompleted 和 ProgressChanged 事件的UI的安全访问。 DoWork 事件仍在非UI线程中运行。要从非UI线程访问UI,请使用Control.Invoke
或SynchronizationContext.Send
“封送”到UI线程(如果用作关键字,这些应该会导致进一步的发现。)
快乐的编码。