Я использую различные типы кистей, как SolidBrush
, HatchBrush
и т.д .., рисовать сложные фигуры и текст в моих окнах формы управления. Код я использую,SolidBrush.Clone бросает исключение
protected void FillShape(Brush myBrush, GraphicsPath shape)
{
if (myBrush is SolidBrush)
{
using (SolidBrush sbr = myBrush.Clone() as SolidBrush)
{
//Code for drawing with solid brush
}
}
else if (myBrush is HatchBrush)
{
//Code for drawing with hatch brush
}
else if (myBrush is LinearGradientBrush)
{
//Code for drawing with linear gradient brush
}
else if (myBrush is PathGradientBrush)
{
//Code for drawing with path gradient brush
}
}
Несколько раз, линия myBrush.Clone()
бросает ArgumentException
. Я искал MSDN ссылку для SolidBrush.Clone() метода, но нет никакой информации о каких-либо исключениях SolidBrush.Clone
Итак, я проверил исходный код этого метода в следующей ссылке Reference code for SolidBrush class
Код, используемый в System.Drawing.SolidBrush.Clone
методы является
public override object Clone()
{
IntPtr cloneBrush = IntPtr.Zero;
int status = SafeNativeMethods.Gdip.GdipCloneBrush(new HandleRef(this, this.NativeBrush), out cloneBrush);
if (status != SafeNativeMethods.Gdip.Ok)
throw SafeNativeMethods.Gdip.StatusException(status);
// We intentionally lose the "immutable" bit.
return new SolidBrush(cloneBrush);
}
Очевидно, что метод Clone
может бросить исключение, но я не в состоянии определить, когда и почему он будет бросать исключение, так как этот код не мой.
Кто-нибудь знает, когда и почему исключение будет выбрано этим методом?
Edit:
Прикрепленный изображение показывает детали исключения
Кроме того, это не система кисти, потому что immutable
свойство кисти false
Не уверен, что это связано, но поскольку вы пишете его, это может быть только иногда, возможно, это случаи, когда вы проходите стандартную кисть, которая не может быть удалена предложение use попытается сделать .. – TaW
'ArgumentException' может быть что угодно, особенно если вы не укажете текст сообщения и вывод его в виде _exact_. См. Http://stackoverflow.com/help/mcve и http://stackoverflow.com/help/how-to-ask для получения информации о том, как написать хороший ответный вопрос. –
Строка 'using (SolidBrush sbr = myBrush.Clone() as SolidBrush)' бессмысленна. Нет смысла создавать копию кисти только для ее удаления. Просто используйте оригинальный 'myBrush', не используя его (иначе говоря, без' использования'). – Loathing