当前位置:  开发笔记 > 编程语言 > 正文

Control.Refresh()跨线程

如何解决《Control.Refresh()跨线程》经验,为你挑选了1个好方法。

好的,请忽略之前的事情.我不再得到错误了,所以看起来我的问题是当我更改Chart数据绑定的值时更新Chart.

//无视这里

大家好.我有一个有面板的WinForms应用程序panel1.后台线程会创建一些其他控件,然后panel1像这样添加

panel1.Controls.AddRange(myArrayOfControls);

这很好用,我可以看到我的控件被添加了.但是,当新数据进入另一个线程时,我更新控件的父对象中的值,然后需要Refresh()使用新值来更新显示.Refresh()在任一上下文中调用,数据进入的线程或接收更新数据的对象都会导致InvalidOperation异常,因为需要Invoke.我已经尝试在我的模型对象中使用Invoke以及数据传入的线程,似乎无法动摇错误.

如果有人有一些指导我会非常感激.

更新:这里有更多信息.我不认为它需要它,但我错了.:)

我有一个对象类MyObject.此MyObject类在名为topologyThread的线程中创建.数据来自dataThread.MyObject的实例具有Panel实例变量,Panel具有子控件,包括System.Windows.Forms.DataVisualization.Charting命名空间中的两个Charts.因此,当数据进入dataThread时,我更新MyObject对象中的相应数据值,然后需要刷新图表以显示更新的数据.

我知道数据处理正常.在我的MyObject类中,我在属性的setter中将新值记录到Console,并看到显示的新值.



1> JaredPar..:

您必须从主UI线程执行这两个操作(刷新和更新控件的父对象).如果您正在从后台线程修改控件而没有得到运气不好的异常,因为它肯定是一个错误.

最好的方法是使用

theControl.Invoke(new MethodInvoker(MyUpdateMethod));

如果您有关于如何完成更新的示例,我们可以提供有关如何从后台线程正确调用它的更好示例.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有