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