amsga Ответов: 0

Как избежать исключения system.overflowexception при вызове system.windows.forms.datavisualization.charting.chart.saveimage


Всем Привет,

Я делаю проект построения диаграмм, и я должен сохранить диаграммы в его отдельных файлах изображений.

Если бы я делал трендовые данные от 1 до 2 месяцев с интервалом в 1 минуту, то не столкнулся бы ни с какой проблемой. Однако если я расширяю тренд до 3 месяцев или более, я получаю OverflowException при сохранении.

Любой совет очень ценится.

Трассировка исключений выглядит следующим образом:
at System.Decimal..ctor(Double value)
at System.Windows.Forms.DataVisualization.Charting.Axis.RoundedValues(Double inter, Boolean shouldStartFromZero, Boolean autoMax, Boolean autoMin, Double& min, Double& max)
at System.Windows.Forms.DataVisualization.Charting.Axis.EstimateNumberAxis(Double& minimumValue, Double& maximumValue, Boolean shouldStartFromZero, Int32 preferredNumberOfIntervals, Boolean autoMaximum, Boolean autoMinimum)
at System.Windows.Forms.DataVisualization.Charting.Axis.EstimateAxis(Double& minimumValue, Double& maximumValue, Boolean autoMaximum, Boolean autoMinimum)
at System.Windows.Forms.DataVisualization.Charting.Axis.EstimateAxis()
at System.Windows.Forms.DataVisualization.Charting.ChartArea.SetDefaultAxesValues()
at System.Windows.Forms.DataVisualization.Charting.ChartArea.SetData(Boolean initializeAxes, Boolean checkIndexedAligned)
at System.Windows.Forms.DataVisualization.Charting.ChartArea.ReCalcInternal()
at System.Windows.Forms.DataVisualization.Charting.ChartPicture.Paint(Graphics graph, Boolean paintTopLevelElementOnly)
at System.Windows.Forms.DataVisualization.Charting.ChartImage.GetImage(Single resolution)
at System.Windows.Forms.DataVisualization.Charting.Chart.SaveImage(Stream imageStream, ChartImageFormat format)
at System.Windows.Forms.DataVisualization.Charting.Chart.SaveImage(String imageFileName, ChartImageFormat format)


Что я уже пробовал:

В настоящее время я использую значения Single/float в своей серии, поэтому я не уверен, почему возникает такое исключение.

Richard MacCutchan

Сообщение означает, что система обнаружила значение, которое слишком велико, чтобы быть представленным в соответствующем типе переменной. Вам нужно использовать свой отладчик, чтобы выяснить, какая переменная и соответствующее значение являются причиной. Смотреть также Таблица Типов С Плавающей Запятой (Справочник По C#) | Microsoft Docs[^]

amsga

Все значения, которые я использую, являются одиночными/плавающими типами данных. Я не думаю, что есть какие-либо значения, которые больше, чем то, что может представлять десятичная дробь.

Richard MacCutchan

Ну, вам нужно использовать свой отладчик, чтобы найти фактическое значение, которое вызывает исключение.

Jochen Arndt

Выполнение происходит в десятичном конструкторе, принимающем двойник: Десятичный Конструктор (Double)
Смотрите ссылку для возможных источников исключения.

Существуют ли значения больше ~1E30 для более длительного периода?

amsga

Насколько мне известно, нет.
Если я случайно попаду в тренд на определенный месяц, то никаких проблем не возникнет.
Если мне случается быть в тренде в течение 3 месяцев или более, то выбрасывается исключение.

Jochen Arndt

Мы не знаем, что показывает ваша диаграмма и каковы ее значения / диапазоны. Но вы можете увидеть его на экране перед сохранением, а также проверить все значения.

Поскольку это происходит в течение длительных периодов, но не в течение коротких, все, что мы можем предположить, - это то, что значения становятся слишком большими или недействительными.

Последнее может произойти, когда период включает времена, для которых нет данных. Затем значения обычно обрезаются или устанавливаются на определенный минимум. респ. Макс. ценности. Это может быть источником здесь, потому что Макс. двойное значение больше максимального значения. Десятичное значение.

0 Ответов