.net OnPaint()中的Graphics.Clear()有时会导致通用GDI+错误
我正在开发一个应用程序,客户机每隔几个月就会遇到一个问题,他们可以通过重新启动应用程序来解决这个问题。堆栈跟踪始终指向从Control OnPaint方法继承的重写类的第一行,该方法调用e.Graphics.Clear 我在微软的文档中读到: Clear方法清除图形对象的状态,当图形对象无法更新时,不应调用该方法。例如,如果在终端服务器会话中在安全桌面上调用Clear方法,则可能会发生ExternalException,使图形对象处于不一致的状态 我已经验证了应用程序的用户没有从远程计算机运行应用程序。 我还读到: 在派生类中重写OnPaint时,请确保调用基类的OnPaint方法,以便注册的委托接收事件 应用程序当前未调用基类“OnPaint”这一事实是否会导致GDI+ExternalException错误消息中出现泛型错误 不幸的是,我在这个问题上暗中摸索,因为我无法复制它,而且它在生产场景中很少发生。有人能提供一些见解吗?如果您创建图形,请始终在以下位置使用它: 使用gr作为图形=Graphics.FromImageimage textSize=gr.MeasureStringmyString,myFont'示例用法 终端使用.net OnPaint()中的Graphics.Clear()有时会导致通用GDI+错误,.net,vb.net,.net,Vb.net,我正在开发一个应用程序,客户机每隔几个月就会遇到一个问题,他们可以通过重新启动应用程序来解决这个问题。堆栈跟踪始终指向从Control OnPaint方法继承的重写类的第一行,该方法调用e.Graphics.Clear 我在微软的文档中读到: Clear方法清除图形对象的状态,当图形对象无法更新时,不应调用该方法。例如,如果在终端服务器会话中在安全桌面上调用Clear方法,则可能会发生ExternalException,使图形对象处于不一致的状态 我已经验证了应用程序的用户没有从远程计算机运行应
另一方面,切勿处置您未创建的对象。包括图形实例。。。当我们简化它时,在这种情况下,它正在等待它的“结束使用”在其他地方–靠近它获得“使用”的地方。系统的许多部分。绘图对象是一次性的。不处理它们是一个非常常见的疏忽。这会持续很长时间,通常GC的运行频率足以防止出现问题。直到它没有,然后你会得到像这样奇怪的异常。使用任务管理器的“流程”选项卡。查看+选择列并勾选GDI对象。修复代码,使数字保持在最多几百以下。您可以尝试捕获错误。我是否应该调用dispose而不是OnPaint方法内部的clear?您不应该对尚未声明的对象使用dispose,因此您不能在此处使用e.Graphics.dispose。我的问题是您使用e.Graphics.Clear的原因是什么?我认为使用e.Graphics.Clear的原因是重置进度条。我想知道是否可以简单地从OnPaint方法中删除这一行