Недавно я столкнулся с OverflowException в GDI + через сторонний инструмент, который вызывает у меня несколько проблем. Я пытаюсь найти причину этого, а затем решить, есть ли какое-либо решение проблемы.
Ошибка происходит в SafeNativeMethods.Gdip.GdipFillPath (), возвращая код ошибки 11, равный GpStatus.ValueOverflow. Я понятия не имею, что это значит или что может быть причиной. Последствия довольно высоки, потому что у меня большая область экрана, которую нельзя нарисовать.
Трассировка стека для этой ошибки:
System.OverflowException: ошибка переполнения.
в System.Drawing.Graphics.CheckErrorStatus (состояние Int32)
в System.Drawing.Graphics.FillPath (кисть, путь GraphicsPath)
в Northwoods.Go.GoShape.DrawPath (Графика g, представление GoView, перо, кисть, путь GraphicsPath)
в Northwoods.Go.GoRoundedRectangle.Paint (Графика g, представление GoView)
в Northwoods.Go.GoLayer.Paint (Графика g, представление GoView, RectangleF clipRect)
в Northwoods.Go.GoView.PaintObjects (логический документ, логический вид, графика g, RectangleF clipRect)
в Northwoods.Go.GoView.PaintView (Графика g, RectangleF clipRect)
в Northwoods.Go.GoView.onPaintCanvas (PaintEventArgs evt)
в Northwoods.Go.GoView.OnPaint (PaintEventArgs evt)
в System.Windows.Forms.Control.PaintWithErrorHandling (PaintEventArgs e, слой Int16, логическое значение disposeEventArgs)
в System.Windows.Forms.Control.WmPaint (Сообщение & m)
в System.Windows.Forms.Control.WndProc (сообщение & m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m)
в System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Здесь, очевидно, используются 2 параметра. GraphicsPath, который я не могу контролировать, и Brush. Кисть возвращается статическим методом, и просто чтобы быть уверенным, что это не проблема с ее удалением, я попытался изменить свойство Brush, чтобы вернуть клон, как показано ниже. Однако это, похоже, не оказало влияния.
public Brush
{
get {
return MappingLinearGradient(this.Bounds).Clone();
}
}