好的,请忽略之前的事情.我不再得到错误了,所以看起来我的问题是当我更改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,并看到显示的新值.
您必须从主UI线程执行这两个操作(刷新和更新控件的父对象).如果您正在从后台线程修改控件而没有得到运气不好的异常,因为它肯定是一个错误.
最好的方法是使用
theControl.Invoke(new MethodInvoker(MyUpdateMethod));
如果您有关于如何完成更新的示例,我们可以提供有关如何从后台线程正确调用它的更好示例.