我必须使用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对象呢?
答案 0 :(得分:1)
如果您的表单已被停用,则代码行中引用的this
会发生异常:
using (backbufferObject = this.CreateGraphics())
...想要已经处理好了。所以它不是被处置的Graphics
对象。这是形式。