c# - 设置 IDisposable 属性时调用 Dispose?

标签 c# idisposable

我今天更改了 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/

相关文章:

c# - 在 WPF 中的页面之间导航?

c# - 应该使用 Dispose() 或 Finalize() 来删除临时文件吗?

c# - 使用 IDisposable 和不使用 IDisposable 的内存释放

c# - 计算不同年份不同日期的平均值

c# - 动态 COM 对象是否被视为托管资源?

asp.net-mvc - 确保对 Controller 中创建的对象进行 IDisposable 调用并移交给查看

c# - 对一次性对象使用 Await Async WhenAll

c# - Json.NET - 如何使用内部构造函数序列化外部类?

c# - 为稍后提到的函数内的整数赋值时出现问题 - 范围问题 - 我认为

c# - 单元测试自动映射器以返回角色中的用户计数