带有图形对象的System.ObjectDisposedException

时间:2013-12-10 01:23:55

标签: c# graphics

我必须使用Windows表单在C#中编写游戏。对于我在屏幕上的绘图方法,我得到一个奇怪的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.           
    }                       
}

抛出System.ObjectDisposedException的有问题的行是:using (backbufferObject = this.CreateGraphics())。我不确定为什么在这个特定点抛出这个异常,因为此对象在此时被重新实例化,而它被放置在使用括号的末尾。到目前为止,我已经尝试将这两行放在using语句中,因为它们受到IDisposable的影响。

在运行时关闭Windows窗体 后,错误可能会被抛出。那么为什么在这个特定的实例中处理这个Graphics对象呢?

完整代码:http://pastebin.com/mSa6XCpP

1 个答案:

答案 0 :(得分:1)

如果您的表单已被停用,则代码行中引用的this会发生异常:

using (backbufferObject = this.CreateGraphics())

...想要已经处理好了。所以它不是被处置的Graphics对象。这是形式。