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 异步运行我的脚本。但是这个将整个应用程序挂在代码中的第一个其他调用上。我被困在这里。如果我以错误的方式调用浏览器代码 - 所有多线程应用程序都可以工作,但我在某处丢失了我的文档。如果我称它为正确的线程安全方式 - 应用程序只是挂起,我什至无法调试它。代码在调用时死亡,从不调用它应该调用的方法。当然是默默的。
如果不看到一些相关的代码,很难说太多。我的猜测是,您正在尝试在创建对象的线程以外的线程上引用该对象。基于我刚刚必须处理的问题,我的建议是创建对浏览器或文档对象的静态引用。