问题描述
Winform窗体,窗体里边嵌套了一个网页webBrowser1,如果网站服务器正常的话,打开winform窗体就没问题,如果网站慢的话,winform就要等很久才可以显示出来(没有办法控制服务器,一会快,一会慢的)所以用了多线程ThreadPool,Winform窗体打开之后自动的创建一个线程去加载图片,这个时候Winform打开的速度就快了很多,但是问题也就来了,如果winform的web没有加载完,然后把界面关掉,然后再重新打开一个别的(还是当前窗体,只是id不一样,显示的内容也不一样)这个时候就提示,未将对象引用XXX,或者是webbrowser已释放或者什么鬼的,求解决,,,,,
解决方案
解决方案二:
前一次启动的线程未关闭?
解决方案三:
谁知道你的哪一个对象是null?如果你懒得调试改bug,那就恢复你单线程的程序呗。
解决方案四:
很显然,所有人都知道,当他调试多线程并发程序的时候,就遇到到某些之前变量声明上考虑不周的东西变为null,甚至变为“诡异的值”。如果你不觉得这个问题是“自己应该解决的工作”,那就没法子了,就别赶时髦进行并发多线程编程了。
解决方案五:
估计是你线程中访问主线程代码报错了,因为你的界面已经关闭了,这时候相关对象都被释放不存在,等你webform加载完并操作主界面的东西时,肯定就要报错了啊
解决方案六:
多线程,建议用委托处理,线程执行过程可控,比如执行完一个任务,调用回调函数
解决方案七:
为什么要启动一个线程去加载图片?WebBrowser加载网页本来就是多线程啊。你直接打开winform,然后加载相关网页不就行了
解决方案八:
引用3楼sp1234的回复:
很显然,所有人都知道,当他调试多线程并发程序的时候,就遇到到某些之前变量声明上考虑不周的东西变为null,甚至变为“诡异的值”。如果你不觉得这个问题是“自己应该解决的工作”,那就没法子了,就别赶时髦进行并发多线程编程了。
来点实际有用的大哥
解决方案九:
引用6楼daixf_csdn的回复:
为什么要启动一个线程去加载图片?WebBrowser加载网页本来就是多线程啊。你直接打开winform,然后加载相关网页不就行了
三克油
解决方案十:
也感觉WebBrowser本身就是多线程,可能描述问题的时候没描述清楚,一个WebBrowser,然后在winfrom有几个图片控件,之前没处理好WebBrowser也使用了多线程,现在修改了,然后就是几个图片控件用几异步加载,现在网速快点,没什么问题,我感觉可能出现的问题:可能是在窗体弹出之后,开始去加载网站的图片(数据库保存了一个图片的地址,所以加载的时候直接用了newImages.FroXXXX去加载)然后可能网站反应慢,但是这个进程已经存在,然后这个时候没等图片反应过来就马上关闭界面,然后马上在打开这个窗体,就比较容易出异常,百度了下说ThreadPool无法手动结束线程,感觉应该是第一次打开并关闭之后线程没有释放掉,然后又马上打开,或者什么之类的,从而出现一些错现在稍微处理了下,但是这个过程感觉自己不足的地方挺错的,从Thread到ThreadPool到Task,尤其是Task直接出现界面没有加载完,一个大的红叉GroupControl上,然后继续百度,感觉在这块很多不清楚,好像Task涉及到一些执行顺序等内容有那个哥哥姐姐在这块了解比较透彻的,可以指点下,给个网址也可以,学习下,不要像SP1234一样,扔完砖头,毛也没剩下(哈哈Sp1234得罪啊)