Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 何时处置图形对象_C#_Windows_Graphics_Bitmap - Fatal编程技术网

C# 何时处置图形对象

C# 何时处置图形对象,c#,windows,graphics,bitmap,C#,Windows,Graphics,Bitmap,我有一个方法,可以循环数据集合,根据从数据库检索到的集合中的数据构建位图,最后将构建的位图添加到我称之为DoorSchedules的集合中 在我的循环中,如果我调用。在我的图形上处理,我收到一个错误。当我不调用属于图形对象的.dispose方法时,不会发生此错误 循环时,我应该何时调用图形对象上的dispose,是否为每个循环创建新的图形对象 代码在下面运行,直到我取消对dc.Dispose的注释 DoorSchedules schedules = new DoorSchedules(

我有一个方法,可以循环数据集合,根据从数据库检索到的集合中的数据构建位图,最后将构建的位图添加到我称之为DoorSchedules的集合中

在我的循环中,如果我调用。在我的图形上处理,我收到一个错误。当我不调用属于图形对象的.dispose方法时,不会发生此错误

循环时,我应该何时调用图形对象上的dispose,是否为每个循环创建新的图形对象

代码在下面运行,直到我取消对dc.Dispose的注释

     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.
    }
}

“我收到一个错误”。愿意和我们分享吗?什么方法调用给你一个错误,错误是什么?出于某种奇怪的原因,我无法重现错误。当它再次抛出时,我将发布错误。