首页 新闻 搜索 专区 学院

webbrowser异常?

0
悬赏园豆:15 [已解决问题] 解决于 2013-12-02 17:23

我做了一个通过WebBrowser抓取数据的程序,当然数据包括图片、声音和视频以及网页截图,所以必须使用webbrowser,但程序运行一段时间后会出现下面的异常:

检测到 ContextSwitchDeadlock
Message: CLR 无法从 COM 上下文 0x3b02f0 转换为 COM 上下文 0x3b0ad8,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作。这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积。要避免此问题,所有单线程单元(STA)线程都应使用泵式等待基元(如 CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。

空明流光的主页 空明流光 | 初学一级 | 园豆:48
提问于:2013-11-28 12:27
< >
分享
最佳答案
0

这个问题我看了好多是有一个语句块有问题,如下:

我最终把线程用类包装了下,与UI分开了,并且做了以下改正。

...

var t = new Thread();

t.Start();

while(t.IsAlive)

  Application.DoEvents(); 这句会导致死锁,线程会在一段时间后自己死掉,没有结束,但是不动了,原因不知。把这句换成Thread.Sleep(100)就没有再出现这个问题了,但内存现在有问题,已经新开帖了。

空明流光 | 初学一级 |园豆:48 | 2013-12-02 17:23
其他回答(1)
0

之前遇到过,线程执行的时间太长了.当时是进行了优化,缩短了执行时间.

收获园豆:15
平常心队长 | 园豆:1113 (小虾三级) | 2013-11-28 14:09

将线程任务从窗体提出来用类包装了一层,与控件交互都做了处理,现在主界面不会死了,但线程运行一段时间后莫名就死那儿了,主窗体可以动,所有线程状态都是在运行,但没有数据输出了,都不知道死在哪里了,怎么办呢?

支持(0) 反对(0) 空明流光 | 园豆:48 (初学一级) | 2013-11-29 14:45

@沧海一杰: 关键问题是线程间根本没有要访问的公共对象,根本不需要同步呀?怎么会死锁呢?

支持(0) 反对(0) 空明流光 | 园豆:48 (初学一级) | 2013-11-29 14:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册