C# 何时处置图形对象
我有一个方法,可以循环数据集合,根据从数据库检索到的集合中的数据构建位图,最后将构建的位图添加到我称之为DoorSchedules的集合中 在我的循环中,如果我调用。在我的图形上处理,我收到一个错误。当我不调用属于图形对象的.dispose方法时,不会发生此错误 循环时,我应该何时调用图形对象上的dispose,是否为每个循环创建新的图形对象 代码在下面运行,直到我取消对dc.Dispose的注释C# 何时处置图形对象,c#,windows,graphics,bitmap,C#,Windows,Graphics,Bitmap,我有一个方法,可以循环数据集合,根据从数据库检索到的集合中的数据构建位图,最后将构建的位图添加到我称之为DoorSchedules的集合中 在我的循环中,如果我调用。在我的图形上处理,我收到一个错误。当我不调用属于图形对象的.dispose方法时,不会发生此错误 循环时,我应该何时调用图形对象上的dispose,是否为每个循环创建新的图形对象 代码在下面运行,直到我取消对dc.Dispose的注释 DoorSchedules schedules = new DoorSchedules(
DoorSchedules schedules = new DoorSchedules();
for (byte i = 0; i < elevation.Bays.Count; i++)
{
if (elevation.Bays[i].HasDoor.Value)
{
for (byte ii = 0; ii < elevation.Bays[i].Doors.Count; ii++)
{
door = elevation.Bays[i].Doors[ii];
width = getInchPx(door.WidthInches);
height = getInchPx(door.HeightInches);
Bitmap canvas = new Bitmap((int)width + DOOR_SCHEDULE_WIDTH_ADD,
(int)height + DOOR_SCHEDULE_HEIGHT_ADD);
Graphics dc = Graphics.FromImage(canvas);
..work removed for readability for stackoverflow.
schedules.Add(new DoorSchedule(canvas));
//dc.Dispose();
};
};
};
DoorSchedules=新的DoorSchedules();
用于(字节i=0;i
您可以尝试封闭需要处理的对象,这样资源将在完成后自动释放
从以上链接:
通常,当您使用IDisposable对象时,应该在using语句中声明并实例化它。using语句以正确的方式调用对象上的Dispose方法,并且(当您如前所示使用它时)一旦调用Dispose,它还会导致对象本身超出范围。在使用块中,对象是只读的,不能修改或重新分配
看看这样的东西是否适合你,如果不适合,请提供你收到的错误
using (Bitmap canvas = new Bitmap((int)width + DOOR_SCHEDULE_WIDTH_ADD,(int)height + DOOR_SCHEDULE_HEIGHT_ADD))
{
using( Graphics dc = Graphics.FromImage(canvas))
{
}
}
在查看上一个问题时,您似乎放弃了使用,因为您最终处理了位图,如果这是相同的代码,您可以尝试创建位图的一部分 因此,在您的情况下,它看起来像:
using (Bitmap canvas = new Bitmap((int)width + DOOR_SCHEDULE_WIDTH_ADD,(int)height + DOOR_SCHEDULE_HEIGHT_ADD))
{
using( Graphics dc = Graphics.FromImage(canvas))
{
dc.DrawEllipse(Pens.Red, 10, 10, 50, 50);
pictureBox1.Image = (Bitmap)canvas.Clone(); //The PictureBox is just an object to accept the newly created bitmap.
}
}
“我收到一个错误”。愿意和我们分享吗?什么方法调用给你一个错误,错误是什么?出于某种奇怪的原因,我无法重现错误。当它再次抛出时,我将发布错误。