У меня есть приложение с графическим интерфейсом, которое отображает данные, используя Windows::Forms::DataVisualization::Charting::Chart
, который работает в большинстве случаев.Просто иногда мы получаем некоторые ложные данные, которые не нравятся элементу управления диаграммы, которые выдают исключение.Чтобы попытаться понять, что является причиной этих проблем, я завернул запрос на перерисовку в try / catch:
try
{
m_chart->Invalidate();
m_chart->Update();
}
catch(System::Exception^ e)
{
// If something goes wrong during the drawing, we probably want to try
// and record some more information then re-throw it so we can capture
// it properly.
String^ detailString = String::Format("Exception caught while trying to draw raw data. {0}", "Add more debug info here");
throw gcnew System::Exception(detailString, e);
}
... по какой-то причине исключение там не выдается(У меня есть точка останова и некоторая регистрация, которая никогда не срабатывает) - это происходит в другой момент:
Exception:
Value was either too large or too small for a Decimal.
Exception type:
System.OverflowException
Source:
mscorlib
Stack trace:
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.Chart.OnPaint(PaintEventArgs e)
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
at System.Windows.Forms.Control.WmPaint(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Installed .net Versions:
v2.0.50727.5420
v3.0.30729.5420
v3.5.30729.5420
v4.0.30319
Я что-то здесь упустил?Не вызывает ли аннулирование / обновление то же самое повторное прорисовывание, что и какая-то другая часть насоса сообщений Windows?