图形,重用之前处理?

时间:2013-08-17 02:03:56

标签: c# dispose graphic

我想知道,我应该在重新使用之前处理一个Graphic对象吗? 意思是我替换它的价值:

graphic =“createGraphic”

类似的东西,我应该在此之前处理吗?

这是我使用它的示例代码:

                        gmp.DrawImage(newImage, 0, 0);
                        if (newImage.Size != panelm.Size)
                        {
                            panelm.Invoke((MethodInvoker)delegate { panelm.Size = newImage.Size; });
                            this.Invoke((MethodInvoker)delegate { this.Size = newImage.Size; });
                            gmp.Dispose();
                            gmp = panelm.CreateGraphics();
                        };

所以,这是一个while循环,在while之前,我让gmp继承了panelm。 但是,我从不在循环中处理它,我只是一直重复使用它,除非尺寸不匹配。

然后我需要重新创建它(否则它是大/小)。

但现在问题是,我应该先处理,还是应该使用creategraphic?

此外,这里的问题是。我无法在gmp上使用“使用”。因为如果我这样做,我只有两种可能性。

1:在while循环之前创建它,并重用它直到while循环结束(意思是,我永远不能改变它)。 2:在while循环中创建它(意味着它将在每个循环中重新创建,我认为这将是一种浪费)。

由于

2 个答案:

答案 0 :(得分:1)

所以你问在你给它一个新值之前是否应该打电话给Dispose()

Graphics gmp = panelm.CreateGraphics();
//do work
gmp.Dispose();
gmp = panelm.CreateGraphics();

Graphics gmp = panelm.CreateGraphics();
//do work
gmp = panelm.CreateGraphics();

作为良好做法,你应该在完成后致电Dispose();虽然如果你不这样做,它会被垃圾收集器自动清理,所以你不会以任何方式泄漏资源。

答案 1 :(得分:0)

引用类型变量不包含对象,而是标识它们;将它们视为对象ID可能会有所帮助。如果对CreateGraphics的调用返回“对象#4872”,则必须确保某些内容将在对象#4872上调用Dispose。如果someVariable碰巧持有“对象#4872”,则说someVariable.Dispose实际上不会对someVariable执行任何操作,而是会在对象#4872上调用Dispose。如果代码在调用Dispose之前覆盖变量,则无法知道哪个对象需要调用Dispose方法。