OnPaint()内部的Graphics.Clear()偶尔会导致泛型GDI +错误

时间:2015-05-04 18:43:28

标签: .net vb.net

我正在处理客户端每两个月遇到一个问题的应用程序(他们可以通过重新启动应用程序来解决问题)。堆栈跟踪始终指向被覆盖的第一行(类继承自ControlOnPaint()方法,该方法调用e.Graphics.Clear()

我已阅读微软文档:

  

Clear方法清除图形对象的状态,当无法更新图形对象时不应调用。例如,如果在终端服务器会话中的安全桌面上调用Clear方法,则可能发生ExternalException,使Graphics对象处于不一致状态。

我已经验证应用程序的用户没有从远程计算机运行该应用程序。 我也读过:

  

在派生类中重写OnPaint时,请务必调用基类的OnPaint方法,以便已注册的委托接收事件。

应用程序当前不会调用基类' OnPaint()导致GDI +"中出现"泛型错误ExternalException错误消息?

不幸的是,我在这个问题上陷入困境,因为我无法重现它,而且在生产场景中很少发生。任何人都可以提供一些见解吗?

1 个答案:

答案 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'。

相关问题