网站优化什么意思,wordpress必备文件组合,施工企业工程施工科目,做五金外贸哪个网站比较好描述#xff1a;C# winform软件使用了chartcontrol控件#xff0c;在使用Timer 动态为图表添加点时#xff0c;报错#xff08;有时报错#xff0c;有时不报错#xff09;
报错内容如下#xff1a;
System.ArgumentOutOfRangeException:“指定的参数已超出有效值的范围…描述C# winform软件使用了chartcontrol控件在使用Timer 动态为图表添加点时报错有时报错有时不报错
报错内容如下
System.ArgumentOutOfRangeException:“指定的参数已超出有效值的范围。
Arg_ParamName_Name”
System.ArgumentOutOfRangeException HResult0x80131502 Message指定的参数已超出有效值的范围。
Arg_ParamName_Name SourceDevExpress.Charts.v18.1.Core StackTrace: 在 DevExpress.Charts.Native.RefinedPointCollection.InsertRange(Int32 index, ICollection1 collection) 在 DevExpress.Charts.Native.CollectionManager.InsertSeriesPoints(IPointProcessor processor, Int32 insertIndex, ICollection1 insertPoints) 在 DevExpress.Charts.Native.CollectionManager.UpdateCollections(IPointProcessor processor, SeriesPointsCollectionAction updateAction) 在 DevExpress.Charts.Native.PointsProcessor.UpdatePoints(SeriesPointsCollectionAction updateAction) 在 DevExpress.Charts.Native.SeriesController.ContextCalculator.ActionsExecutor.UpdateSeriesPointsCollection(SeriesPointsCollectionActionBase update) 在 DevExpress.Charts.Native.SeriesController.ContextCalculator.ActionsExecutor.Execute() 在 DevExpress.Charts.Native.SeriesController.ContextCalculator.CalculateContext(ChartUpdateAggregator updateAggregator) 在 DevExpress.Charts.Native.SeriesController.UpdatesExecutor.Execute(ChartUpdateAggregator updateAggregator) 在 DevExpress.Charts.Native.SeriesController.CommitTransaction(Boolean loading) 在 DevExpress.XtraCharts.Native.ViewController.ApplyChangesCore() 在 DevExpress.XtraCharts.Native.ViewController.ApplyChanges() 在 DevExpress.XtraCharts.Native.ViewController.ApplyChangesBeforeRender() 在 DevExpress.XtraCharts.Native.Chart.DrawContent(Graphics graphics, INativeGraphics nativeGraphics, Rectangle bounds, Rectangle windowsBounds, Boolean lockDrawingHelper, Boolean useImageCache, GraphicsQuality graphicsQuality) 在 DevExpress.XtraCharts.Native.Chart.DrawContent(Graphics graphics, Rectangle bounds, Boolean useImageCache) 在 DevExpress.XtraCharts.ChartControl.OnPaint(PaintEventArgs e) 在 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer) 在 System.Windows.Forms.Control.WmPaint(Message m) 在 System.Windows.Forms.Control.WndProc(Message m) 在 DevExpress.XtraCharts.ChartControl.WndProc(Message m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 解决办法DevExpress 中ChartControl 在生成Chart 和动态更新Chart 时只适用于同 一个主线程中.
将System.Timers.Timer 替换为 System.Windows.Forms.Timer 即可。 参考官方回答ArgumentOutOfRangeException on chart repaint. | DevExpress SupportHi Support, I get an ArgumentOutOfRangeException for an invalid index when a chart repaints. The call stack follows bellow. I know it is prahttps://supportcenter.devexpress.com/ticket/details/t733964/argumentoutofrangeexception-on-chart-repaint
ArgumentOutOfRangeException on chart repaint. | DevExpress Support
官方技术支持建议 绑定数据和图形控件在同一线程。
解决在订阅事件方法中调用this.BeginInvoke()方法在委托内进行数据和图形处理。 引申
1、System.Windows.Forms System.Windows.Forms命名空间下的Timer控件它直接继承自Componet。Timer控件只有绑定了Tick事件和设置EnabledTrue后才会自动计时停止计时可以用Stop()方法控制通过Stop()停止之后如果想重新计时可以用Start()方法来启动计时器。Timer控件和它所在的Form属于同一个线程 2、System.Timers.Timer: System.Timers命名空间下的Timer类。System.Timers.Timer类定义一个System.Timers.Timer对象然后绑定Elapsed事件通过Start()方法来启动计时通过Stop()方法或者Enablefalse停止计时。AutoReset属性设置是否重复计时设置为false只执行一次设置为true可以多次执行。Elapsed事件绑定相当于另开了一个线程也就是说在Elapsed绑定的事件里不能访问其它线程里的控件需要定义委托通过Invoke调用委托访问其它线程里面的控件。