C#:WebBrowser.Document在文档处理线程结束后中断

时间:2012-06-10 23:00:55

标签: c# multithreading events browser

我整个周末都意识到,当一个文档处理线程完成时,WebBrowser.Document对象被破坏且无法使用。

代码如:

if (Browser.Document == null) ...

提出异常。

我有一些基于事件的脚本,可以将文档加载到WebBrowser中并对其执行操作。所有脚本完成后都会引发事件。

然后,根据我的文档状态 - 我会运行其他脚本。但没有文件!为什么?它会发生什么?是否被随机数据破坏,处置,覆盖?

最后一个事件之间没有代码。启动并测试文档。我前面有一行文档,下一行它已经消失了!会发生什么?!

System.Threading.Thread.CurrentThread.ManagedThreadId返回这两行的其他值。这个杀手有解决方法吗?我现在发现只有一种方法可以处理它 - 我可以用以下方法重新加载文档:

Browser.Url = Browser.Url.但这是愚蠢和多余的。

重点是让文档能够使用WebBrowser对其执行更多操作。

还有一件事 - 触发我的第一个动作链的线程作为新任务执行。它运行在与文档上运行的其余代码不同的线程中。我知道这是错的,但这是我第一次做对了。我没有开始新任务,而是使用BeginInvoke异步运行我的脚本。但是这个应用程序会在代码中的第一个其他调用上挂起整个应用程序。我被困在这里。如果我以错误的方式调用浏览器代码 - 所有多线程应用程序都可以工作,但我在某处丢失了我的文档。如果我称之为正确的,线程安全的方式 - 应用程序只是挂起,我甚至无法调试它。代码在调用时死掉,它永远不会调用它应该调用的方法。当然是默默无闻。

1 个答案:

答案 0 :(得分:0)

如果没有看到一些相关的代码,很难说。我的猜测是你试图在一个线程上引用该对象而不是它创建的那个线程。基于我刚才要处理的问题,我的建议是创建一个对浏览器或文档对象的静态引用。