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

rag*_*age 6 .net vb.net

我正在开发一个应用程序,客户端每隔几个月就会遇到一个问题(他们可以通过重新启动应用程序来解决问题).堆栈跟踪始终指向要调用的重写(类继承自Control)OnPaint()方法的第一行e.Graphics.Clear().

我已阅读微软文档:

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

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

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

可能是应用程序当前没有调用基类' OnPaint()导致"GDI +"ExternalException错误消息中出现"泛型错误" 的事实?

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

mir*_*lav 0

如果创建图形,请始终在Using语句中使用它中使用它:

\n\n
Using gr As Graphics = Graphics.FromImage(image)\n\n    textSize = gr.MeasureString(myString, myFont) \'sample usage\n\nEnd Using\n
Run Code Online (Sandbox Code Playgroud)\n\n

另一方面,绝不是 没有创建的Dispose()对象。(包括...的实例)当我们简化它时,在这种情况下,它正在等待它的 \' \' 在它得到 \' 的地方附近的其他 \xe2\x80\x93 地方GraphicsEnd UsingUsing\' \'。

\n