Я получил это исключение при вызове моего проекта из API.Общая ошибка в GDI + при очистке
Метод, в котором вызывается сообщение throw из события, когда мы меняем какое-либо значение, оно будет перерисовывать фон и перерисовывать строку. Этого никогда не бывает при использовании приложения обычно, но когда я изменил значение из API, он иногда бросает это.
System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
at System.Drawing.Graphics.Clear(Color color) at MyCompany.Project.GUI.Drawable.DrawLabel() in D:\Source\MyCompany\Project\GUI\Drawable.cs:line 191
at MyCompany.Project.GUI.Drawable.OnPaint(PaintEventArgs e) in D:\Source\MyCompany\Project\GUI\Drawable.cs:line 26
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.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.UserControl.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)
Вот как мой код выглядит
public class Drawable : UserControl
{
private Graphics g;
public void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
DrawLabel();
}
private void DrawLabel()
{
if ((TopLabels != null) || (LeftLabels != null))
{
g.Clear(BackColor); //tje error is in here.
g = CreateGraphics();
/* another things to do*/
}
}
}
Зачем мне избавляться от создания графики? Я имею в виду, что ярлык draw вызывается не только из onPaint, но и тот, кто вызывает ошибку, является красным мехом. Можете ли вы дать мне объяснение? – kfmlx
Поскольку CreateGraphics() возвращает ** временную ** поверхность, которая стирается, когда элемент управления обновляется. Это почти никогда не правильный способ сделать это ... –