Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net OnPaint()中的Graphics.Clear()有时会导致通用GDI+错误_.net_Vb.net - Fatal编程技术网

.net OnPaint()中的Graphics.Clear()有时会导致通用GDI+错误

.net OnPaint()中的Graphics.Clear()有时会导致通用GDI+错误,.net,vb.net,.net,Vb.net,我正在开发一个应用程序,客户机每隔几个月就会遇到一个问题,他们可以通过重新启动应用程序来解决这个问题。堆栈跟踪始终指向从Control OnPaint方法继承的重写类的第一行,该方法调用e.Graphics.Clear 我在微软的文档中读到: Clear方法清除图形对象的状态,当图形对象无法更新时,不应调用该方法。例如,如果在终端服务器会话中在安全桌面上调用Clear方法,则可能会发生ExternalException,使图形对象处于不一致的状态 我已经验证了应用程序的用户没有从远程计算机运行应

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

我在微软的文档中读到:

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

我已经验证了应用程序的用户没有从远程计算机运行应用程序。 我还读到:

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

应用程序当前未调用基类“OnPaint”这一事实是否会导致GDI+ExternalException错误消息中出现泛型错误

不幸的是,我在这个问题上暗中摸索,因为我无法复制它,而且它在生产场景中很少发生。有人能提供一些见解吗?

如果您创建图形,请始终在以下位置使用它:

使用gr作为图形=Graphics.FromImageimage textSize=gr.MeasureStringmyString,myFont'示例用法 终端使用
另一方面,切勿处置您未创建的对象。包括图形实例。。。当我们简化它时,在这种情况下,它正在等待它的“结束使用”在其他地方–靠近它获得“使用”的地方。

系统的许多部分。绘图对象是一次性的。不处理它们是一个非常常见的疏忽。这会持续很长时间,通常GC的运行频率足以防止出现问题。直到它没有,然后你会得到像这样奇怪的异常。使用任务管理器的“流程”选项卡。查看+选择列并勾选GDI对象。修复代码,使数字保持在最多几百以下。您可以尝试捕获错误。我是否应该调用dispose而不是OnPaint方法内部的clear?您不应该对尚未声明的对象使用dispose,因此您不能在此处使用e.Graphics.dispose。我的问题是您使用e.Graphics.Clear的原因是什么?我认为使用e.Graphics.Clear的原因是重置进度条。我想知道是否可以简单地从OnPaint方法中删除这一行