2013-12-10 3 views
0

Мне нужно написать игру на C#, используя форму Windows. Для моего метода рисования на моем экране, я получаю странный System.ObjectDisposedException, который нерестится на одном из моих графических объектов являются instantiated.Here является проблематичным кодом:System.ObjectDisposedException с графическим объектом

// Graphics variables. 
Graphics graphics; 
Graphics backBufferObject; 
Bitmap backBuffer; 
// Graphics and backBuffer are instantiated, elsewhere, in the constructor. 

private void DrawScreen() 
{ 
    // Copy the BackBuffer to Graphics Object. 
    using (graphics = Graphics.FromImage(backBuffer)) 
    using (backBufferObject = this.CreateGraphics()) 
    { 
     // Draw BackBuffer to screen (buffer switching).     
     backBufferObject.DrawImage(backBuffer, 0, 0, this.Width, this.Height); 

     graphics.DrawImage(Properties.Resources.scary_pacman, new Rectangle(
      this.Width/2 , this.Height/2, 32, 32)); 

     graphics.Clear(Color.Thistle); // Clear BackBuffer for efficient rendering.   
    }      
} 

Проблематики линии, которая бросает систему. ObjectDisposedException - строка: using (backbufferObject = this.CreateGraphics()). Я не уверен, почему это исключение выбрасывается в этой конкретной точке из-за того, что этот объект рестанируется в этот момент, тогда как он был расположен в конце скобок использования. До сих пор я пытался помещать эти две строки в операторы using из-за того, что на них влияет IDisposable.

Возможно, было бы замечательно, что ошибка вызывается после Закройте форму Windows во время работы. Итак, почему этот объект Graphics удаляется в этом конкретном случае?

Полный код: http://pastebin.com/mSa6XCpP

ответ

1

Если форма была отключена, this ссылка в строке кода исключение происходит на:

using (backbufferObject = this.CreateGraphics()) 

... полюбит уже быть утилизированы. Таким образом, это не объект Graphics, который находится в распоряжении. Это форма.

Смежные вопросы