许多GDI +类实现了IDisposable,但我不确定何时应该调用Dispose。我使用new
创建的实例或Graphics.CreateGraphics
之类的静态方法很清楚。但是属性getter返回的对象呢?我经常写这样的代码:
var oldRgn = g.Clip;
using (var rectRegion = new Region(rectangle))
{
g.Clip = rectRegion;
// draw something
}
g.Clip = oldRgn;
我应该在那之后处置oldRgn
吗?我的记忆分析器告诉我,如果不这样做,会有一些不受欢迎的实例。在反射器中查看实现至少可以确认getter在每次调用时都显然会创建一个新实例:
// Graphics.Clip code from Reflector:
public Region get_Clip()
{
Region wrapper = new Region();
int status = SafeNativeMethods.Gdip.GdipGetClip(new HandleRef(this, this.NativeGraphics), new HandleRef(wrapper, wrapper.nativeRegion));
if (status != 0)
{
throw SafeNativeMethods.Gdip.StatusException(status);
}
return wrapper;
}
我在MSDN中找不到任何相关信息,文档中的示例似乎从未处理过任何内容。
答案 0 :(得分:2)
通常,如果类为IDisposable
,则必须在不需要对象时调用.Dispose
方法。
此外,MSDN库说:
修改返回的Region对象 由Clip属性不影响 随后使用Graphics绘图 宾语。要更改剪辑区域, 用a替换Clip属性值 新的区域对象。
这意味着,您必须处置oldRgn
。