首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET ImageList偶尔腐败

.NET ImageList偶尔腐败
EN

Stack Overflow用户
提问于 2014-07-25 10:06:29
回答 1查看 750关注 0票数 1

使用Winforms .net应用程序时,我们会遇到图像列表偶尔损坏的问题。

所谓损坏,我指的是图像数量的计数将是错误的,并且/或图像可能已被系统图像(如对话框图标)所取代。

例如,下面的屏幕截图显示了显示正确数字的imageInfoCollection,但是显示了不正确数字的计数。

图像列表位于用户在整个应用程序使用过程中反复打开的表单上。图像列表由窗体上的选项卡控件使用。

这个问题只是偶尔发生,每5到20次打开一次。

加载映像列表的代码由设计器构建,并使用资源中的图像:

代码语言:javascript
复制
this.imageListCallTakingScreen.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListCallTakingScreen.ImageStream")));
this.imageListCallTakingScreen.TransparentColor = System.Drawing.Color.Transparent;
this.imageListCallTakingScreen.Images.SetKeyName(0, "spinner.png");
this.imageListCallTakingScreen.Images.SetKeyName(1, "recommendation-star.png");
this.imageListCallTakingScreen.Images.SetKeyName(2, "recommendation-star_red.png");
this.imageListCallTakingScreen.Images.SetKeyName(3, "recommendation-star - Transparent.png");
this.imageListCallTakingScreen.Images.SetKeyName(4, "Initialisation_fail16.png");
this.imageListCallTakingScreen.Images.SetKeyName(5, "information_white.png");
this.imageListCallTakingScreen.Images.SetKeyName(6, "Check-icon.png");

除了在designer.cs代码中创建它并将其连接到选项卡控件(除了我输入的错误捕获行外),其他任何地方都不使用映像列表:

想法?我们被困在了这个问题上,而谷歌并没有出现太多问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-25 10:41:57

imageInfoCollection字段正确地跟踪ImageList中的图像数量。Count属性跟踪本机Windows imagelist控件中实际显示的图像数。

只有一种方式,这些值可能会有一个错配,我可以想到。您的程序正在泄漏GDI对象句柄。Winform应用程序中一个相当常见的问题。这会持续很长一段时间,直到您达到这些句柄的操作系统配额为止,在您消耗了10,000个句柄之后,Windows就不再允许您创建更多的句柄了。.NET包装器类中的错误检查并不完全符合要求,因此可以在不生成异常的情况下进行。当你达到这个极限时,你会看到更多奇怪的绘画艺术品。

您可以从Task,Processes选项卡获得基本诊断。使用View + Select列并勾选GDI对象和用户对象。当您像用户一样操作程序时,请观察这些值。GDI物体的稳定上升值意味着厄运。提示您忘记使用using语句来释放System.Drawing对象。垃圾收集器跑得不够频繁让你不惹麻烦。您需要在代码中修复这个问题,这样计数器就可以在几百个对象上保持稳定。

用户对象的稳步攀升值也是一个非常常见的Winforms错误。这是一个非常致命的问题,它也会增加GDI对象的计数,而GC无法解决这个问题。当您使用Controls.Remove/At()或Controls.Clear()删除代码中的控件并忘记释放已删除的控件对象时,就会发生这种情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24953180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档