У меня есть приложение, в котором я использую пользовательскую кнопку. Для этого я использую отдельный класс рисования для рисования. Класс рисования был получен из IDisposable, и я вызвал GC.SuppressFinalize (this) в его интерфейсе. Все работает нормально, но когда я импортирую изображение для кнопки, вызывается утилизация, которая удаляет мое изображение, что приводит к недопустимому исключению.
Мы используем GC.SuppressFinalize (this) для удаления управляемых ресурсов, используемых в нашем приложении, и я обнаружил, что это вызывает проблему.
Это простой код для репликации.
public class Custom : Control
{
private DrawingClass drawingClass;
public Custom()
{
this.drawingClass = new DrawingClass();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if(Image != null)
e.Graphics.DrawImage(Image, this.ClientRectangle.Location);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
{
Image.Dispose();
}
}
public Image Image { get; set; }
}
public class DrawingClass : IDisposable
{
public void Dispose()
{
GC.SuppressFinalize(this);
}
}
Когда я перетаскиваю этот элемент управления Custom
и пытаюсь назначить изображение, используя процесс импорта, вызывается утилизация, которая удаляет изображение, ведущее исключение которого при рисовании.
Утилизация была вызвана из «System.Windows.Forms.UnsafeNativeMethod».
Может кто-нибудь подсказать, что не так или использование GC.SuppressFinalize () действительно вызывает проблемы?