我有一个在许多机器上运行良好的软件,虽然在一台机器上偶尔会出现一个问题,MenuStrip 和 ToolStrip 都显示为空白的白色背景,上面有一个红色的叉号,作为自定义控件如果您创建了一个空对象。这在我调试时不会发生,我不知道如何使问题再次发生,但它确实发生了。我想知道是否有人知道可能是什么问题?
它会是 .NET 框架的版本吗?
谢谢
我有一个在许多机器上运行良好的软件,虽然在一台机器上偶尔会出现一个问题,MenuStrip 和 ToolStrip 都显示为空白的白色背景,上面有一个红色的叉号,作为自定义控件如果您创建了一个空对象。这在我调试时不会发生,我不知道如何使问题再次发生,但它确实发生了。我想知道是否有人知道可能是什么问题?
它会是 .NET 框架的版本吗?
谢谢
当存在 GDI+ 问题(“死亡的红色 X”)时,这种情况很常见。你在做任何自定义绘图OnPaint
吗?或者可能存在损坏或处理不当的图形资源或字形。
编辑:我已经重新阅读了你的问题。您似乎仅在其中一台机器上拥有此功能。我为此搜索了一下,偶然发现了这个旧线程。底部的帖子表明关闭虚拟内存可能存在问题:
我们确实设法解决了这个问题——我们在运行 XP Embedded 的设备上看到了这个问题。XPe 映像开发人员关闭了虚拟内存,我们一打开它,问题就消失了。我相信这只是系统显示图形内存不足的症状(尤其是如果您使用大量双缓冲)
希望有帮助。
对我来说,这听起来像是内存不足异常的症状。
编辑:
这有时会导致System.InvalidOperationException: BufferedGraphicsContext
您是否尝试从 GUI 线程以外的线程更新 GUI 控件?将跨线程操作与吞没所有内容的异常处理程序结合起来,我们在我正在维护的应用程序上拥有您描述的行为(在网格控件上,而不是菜单栏上)。
绝对听起来像一个跨线程问题。
确保在访问控件和/或从不是主 UI 线程的线程触发事件时使用 Invoke。
看到这发生在一台拥有我们产品的 1000 多台计算机上。在那台计算机上,我看到一个 .NET 3.5 程序偶尔会在其数据网格上显示红色 X。另一个更简单的 .NET 2.0 程序在其 menuStrip 上获得了红色 X。我只有更简单程序的源代码,但我可以说根本没有任何用户代码会影响该组件。没有跨线程的东西,因为没有更新它。它的内容是在开发时设置的,在程序加载时添加了一项。Red X 故障在程序加载后很好。
我很惊讶地在两个不同的框架和一个没有数据绑定的程序上看到了这个问题。我非常希望计算机关闭其虚拟内存。
如果不是这样,那么对于跨 .NET 2.0 和 .NET 3.5 共享的系统部件的任何指导将不胜感激。
更新:有问题的用户将计算机退役并更换(解决了问题)