0

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

代码如:

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

引发异常。

我有一些基于事件的脚本,它们将文档加载到 WebBrowser 并对其执行操作。当所有脚本完成时引发事件。

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

最后一个事件 .Invoke 和测试文档之间没有代码。前一行我有文件,下一行它不见了!怎么了?!

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

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

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

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

4

1 回答 1

0

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

于 2012-06-11T01:54:27.740 回答