使用Devexpress的chartcontrol控件报System.ArgumentOutOfRangeException异常及解决办法

描述:C# winform软件使用了chartcontrol控件,在使用数据刷新时会不定时的报错(有时报错,有时不报错)

控件使用方法:charcontrol控件通过订阅事件获取最新的数据,然后在chartcontrol控件上显示。

报错内容如下

System.ArgumentOutOfRangeException:“指定的参数已超出有效值的范围。

Arg_ParamName_Name”

System.ArgumentOutOfRangeException

  HResult=0x80131502

  Message=指定的参数已超出有效值的范围。

Arg_ParamName_Name

  Source=DevExpress.Charts.v18.1.Core

  StackTrace:

   在 DevExpress.Charts.Native.RefinedPointCollection.InsertRange(Int32 index, ICollection`1 collection)

   在 DevExpress.Charts.Native.CollectionManager.InsertSeriesPoints(IPointProcessor processor, Int32 insertIndex, ICollection`1 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)

 

 

解决办法:

参考官方回答:https://supportcenter.devexpress.com/ticket/details/t733964/argumentoutofrangeexception-on-chart-repaint

使用Devexpress的chartcontrol控件报System.ArgumentOutOfRangeException异常及解决办法

使用Devexpress的chartcontrol控件报System.ArgumentOutOfRangeException异常及解决办法

 

官方技术支持建议绑定数据和图形控件在同一线程。

解决:在订阅事件方法中调用this.BeginInvoke()方法,在委托内进行数据和图形处理。