我想知道,我应该在重新使用之前处理一个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循环中创建它(意味着它将在每个循环中重新创建,我认为这将是一种浪费)。
由于
答案 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
方法。