我正在处理客户端每两个月遇到一个问题的应用程序(他们可以通过重新启动应用程序来解决问题)。堆栈跟踪始终指向被覆盖的第一行(类继承自Control
)OnPaint()
方法,该方法调用e.Graphics.Clear()
。
我已阅读微软文档:
Clear方法清除图形对象的状态,当无法更新图形对象时不应调用。例如,如果在终端服务器会话中的安全桌面上调用Clear方法,则可能发生ExternalException,使Graphics对象处于不一致状态。
我已经验证应用程序的用户没有从远程计算机运行该应用程序。 我也读过:
在派生类中重写OnPaint时,请务必调用基类的OnPaint方法,以便已注册的委托接收事件。
应用程序当前不会调用基类' OnPaint()
导致GDI +"中出现"泛型错误ExternalException错误消息?
不幸的是,我在这个问题上陷入困境,因为我无法重现它,而且在生产场景中很少发生。任何人都可以提供一些见解吗?
答案 0 :(得分:0)
如果 你创建图形,请始终在Using
statement中使用它:
Using gr As Graphics = Graphics.FromImage(image)
textSize = gr.MeasureString(myString, myFont) 'sample usage
End Using
另一方面,从不 Dispose()
你没有创建的对象。 (包括Graphics
的实例...)当我们简化它时,在这种情况下它正在等待它的End Using
'在其他地方 - 靠近它的地方#Using
'。