【问题标题】:.Net Windows Forms ListView OwnerDraw LargeImageList leak.Net Windows 窗体 ListView OwnerDraw LargeImageList 泄漏
【发布时间】:2009-11-16 16:55:11
【问题描述】:

我正在绘制 .Net Windows Forms ListView 控件,当我需要从关联的 LargeImageList 中绘制图像时,我看到了一个非常奇怪的错误/行为。

当 View 类型是使用 LargeImageList 的类型(Tile、LargeIcon 等)时,我从 LargeImageList 中绘制项目图像。在这种情况下,我看到了巨大的内存增加,当您尝试滚动 ListView 时,这变得更加明显,因为您也看到了生涩的滚动。当相同的代码使用 SmallImageList 时不会发生同样的事情,就像这样:

Image MyImage = this.LargeImageList.Images[MyIndex];
e.Graphics.DrawImage(MyImage,MyLocation);

根据我的测试,这可以在 XP 和 7 下重现。这是一个已知的错误,有什么解决方法吗?

问候,

奥兹登

【问题讨论】:

    标签: c# .net winforms listview


    【解决方案1】:

    虽然我仍然认为这是一个错误,但我找到了解决方法。如果你使用 ImageList.Draw 而不是 e.Graphics.DrawImage 绘图,这个问题似乎就消失了。

    【讨论】:

      【解决方案2】:

      您如何管理无效的绘图区域?正如你所说,看起来你正在“过度绘制”控件,我的意思是,即使在没有必要的情况下也要绘制。

      【讨论】:

      • 从 .Net 2 开始,ListView 提供 ownerdraw 功能并引发 DrawItem、DrawSubItem 等事件。我想这些事件在需要重绘时为每个项目引发。我不会重写控件 WNDProc 来捕获 WM_PAINT 或任何其他东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多