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

本文关键字:线程 结束 中断 处理 文档 WebBrowser Document | 更新日期: 2023-09-27 18:36:48

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

代码如下:

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

引发异常。

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

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

上一个事件之间没有代码。调用并测试文档。前面一行我有文档,下一行它消失了!发生什么事?!

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

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

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

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

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

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