我今天更改了 FxCop 规则,将任何未处理的 IDisposables 指出为错误,希望它可以帮助我追踪一些 GDI 泄漏。有趣的是,它向我指出了一个我不太确定如何处理的实例:
public class CustomGoRectangle : GoRectangle
{
public void DoStuff()
{
Pen p = new Pen(Color.Red, 4.0f);
this.Pen = p;
}
public void DoOtherStuff()
{
Pen p = new Pen(Color.Blue, 4.0f);
this.Pen = p;
}
public void Test()
{
this.Pen = Pens.Green;
DoStuff();
DoOtherStuff();
}
}
快速解释。 GoRectangle 位于第 3 方库中,并具有 Pen 属性,它不是 IDisposable。
我把笔放在了很多地方,就像上面的例子一样。这里说明的问题是,调用 DoStuff()
我创建了一支新笔,它从未被释放。现在,如果在分配新值之前 this.Pen 不为 null,我可以调用 dispose,但正如 Test()
所示,如果已设置系统笔,这只会导致进一步的问题。处理这种情况的实际模式是什么?
最佳答案
您可以在重新分配之前手动调用 this.Pen.Dispose()
。
关于c# - 设置 IDisposable 属性时调用 Dispose?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065931/