Как избежать исключения 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
Мы не знаем, что показывает ваша диаграмма и каковы ее значения / диапазоны. Но вы можете увидеть его на экране перед сохранением, а также проверить все значения.
Поскольку это происходит в течение длительных периодов, но не в течение коротких, все, что мы можем предположить, - это то, что значения становятся слишком большими или недействительными.
Последнее может произойти, когда период включает времена, для которых нет данных. Затем значения обычно обрезаются или устанавливаются на определенный минимум. респ. Макс. ценности. Это может быть источником здесь, потому что Макс. двойное значение больше максимального значения. Десятичное значение.