我用webBrowser做了一个网页批量截图工具,截完图后自动截下一个图。虽然不是多线程,但多打开几个窗口同时工作还是很不错的。 最大的问题是在运行一段时间候就会报内存错误,重新打开又正常了。在网上找了很多资料说没有释放资源造成的。后来想了一下,不停的在webBrowser里打开数百个网页,我想就是IE也会出问题,可是怎么才可以释放资源?使用System.Runtime.InteropServices.Marshal.ReleaseComObject(webBrowser);好象没有效果,问题还会出来使用 GC.Collect();
GC.WaitForPendingFinalizers();
还是没有效果使用
do
{
refsLeft = System.Runtime.InteropServices.Marshal.ReleaseComObject(webBrowser.ActiveXInstance);
} while (refsLeft > 0);
俣用这个更可怕,连重新创建都不行了。最后使用
webBrowser.Dispose();
用它释放后截下一个图的时候再重新创建webBrowser对象,重新加入事件。运行扣前几张正常,但时间不长就弹出无数的空白网页。不知是什么原因。还有人说用线程创建webBrowser,当线程结彭束后,资源就释放了。创建线程又要指定ApartmentState.STA,
程序正常 运行,但是运行到webBrowser(xcv).Navigate就结束了跟本不会运行DocumentCompleted事析里的程序。由与一直没有成功的在线程里完成工作,所以会不会出现内存问题还是个未知数。声明一下我是个菜鸟,好多基本知识还不是很了解,请大家帮着看看,用什么方法可以正常做到批量截图。
GC.WaitForPendingFinalizers();
还是没有效果使用
do
{
refsLeft = System.Runtime.InteropServices.Marshal.ReleaseComObject(webBrowser.ActiveXInstance);
} while (refsLeft > 0);
俣用这个更可怕,连重新创建都不行了。最后使用
webBrowser.Dispose();
用它释放后截下一个图的时候再重新创建webBrowser对象,重新加入事件。运行扣前几张正常,但时间不长就弹出无数的空白网页。不知是什么原因。还有人说用线程创建webBrowser,当线程结彭束后,资源就释放了。创建线程又要指定ApartmentState.STA,
程序正常 运行,但是运行到webBrowser(xcv).Navigate就结束了跟本不会运行DocumentCompleted事析里的程序。由与一直没有成功的在线程里完成工作,所以会不会出现内存问题还是个未知数。声明一下我是个菜鸟,好多基本知识还不是很了解,请大家帮着看看,用什么方法可以正常做到批量截图。
解决方案 »
- 用dsoframer 打开excel 后,关闭dsoframer 怎么删除这个excel进程
- 怎么判断程序是怎么运行的
- 求救,以下是我做的一个灰度直方图的代码。麻烦帮我看看到底是哪里出现问题了
- 问一个 Matrix的问题
- 我怎么把我的带参数的存储过程和我的C#程序真正结合起来?(得到解决就给分)
- 现在有三个comboBox控件,把它们的数据源都设为ArrayList,可是当改变comboBox其中任何一个值的时候,其他两个也跟着改变,并且改变后,三个co
- 如何清除DataGrid里面的记录?
- SocketAsyncEventArgs如何实现同时发送接收?
- C#中字符串比较选用哪个方法
- 高手快来,关于自定义的用户控件的问题!!
- 服务器端安装 VSS 2005时报错.The server configuration settings apply only for local datab
- RichTextBox右键弹出菜单的问题
第一在webBrowser频繁加载网页如何不出现内存错误。第二webBrowser可以在线程里创建吗?线程里的事建如何工作?多线程同时截图会出现内存问题吗?
"没有释放资源造成", 你怎么确定的是webBrowser没有释放资源,而不是其它地方的问题?
如果可以,把代码也贴上来看看
webBrowser.Dispose();
webBrowser = null;
但还是会出现同样的问题错误信息提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”12楼说的方法,应该没问题,不过我不会弄啊,有现成的代码可以参考吗?