1

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

图形=“创建图形”

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

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

                        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循环中创建它,(这意味着它将在每个我认为会浪费的循环中重新创建)。

谢谢

4

2 回答 2

1

所以你问是否应该Dispose()在给它一个新值之前调用它?

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

相对

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

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

于 2013-08-17T02:21:53.553 回答
0

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

于 2013-08-18T22:18:20.023 回答