我正在开发一个应用程序,其中客户每隔几个月就会遇到一个问题(他们可以通过重新启动应用程序来解决该问题)。堆栈跟踪始终指向重写的第一行(类继承自Control
) OnPaint()
调用的方法e.Graphics.Clear()
.
我在微软的文档中读到:
Clear 方法清除图形对象的状态,当图形对象无法更新时不应调用。例如,如果在终端服务器会话中的安全桌面上调用 Clear 方法,则可能会发生ExternalException,从而使 Graphics 对象处于不一致的状态。
我已验证该应用程序的用户没有从远程计算机运行该应用程序。
我还读过:
在派生类中重写 OnPaint 时,请务必调用基类的 OnPaint 方法,以便注册的委托接收该事件。
应用程序当前未调用基类的事实可能是这样吗?OnPaint()
导致出现“GDI+ 中发生一般错误”ExternalException 错误消息?
不幸的是,我在黑暗中尝试解决这个问题,因为我无法重现它,而且这种情况在生产场景中很少发生。有人可以提供一些见解吗?
If you create图形,始终使用它:
Using gr As Graphics = Graphics.FromImage(image)
textSize = gr.MeasureString(myString, myFont) 'sample usage
End Using
另一方面,never Dispose()
该对象you没有创造。 (包括实例Graphics
...)当我们简化它时,在这种情况下它正在等待它的'End Using
'其他地方——靠近它得到它的地方'Using
'.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)