我有一个多线程应用程序,它使用托管在简单WPF窗口中的WebBrowser控件。WebBrowser问题 - 导航时出现InvalidOperationException
我第一次创建窗口并显示它 - 一切都很好。 但是 - 当我试图打开它多次(通常在第三次...)我试图调用WebBrowser的Navigate方法时得到和无效操作异常。
我已经试过阅读一些关于它的内容,我认为它与Web浏览器背后的DEP和COM对象有关。
我想,也许这是与以前的化网页浏览器,所以我TREID处置它以不同的方式,如:
brws.DocumentCompleted -= new System.Windows.Forms.
WebBrowserDocumentCompletedEventHandler(brws_DocumentCompleted);
brws.Stop();
brws.DocumentText = "";
this.brws.Dispose();
但它并不能帮助......
也许任何人看到这个错误并知道如何解决它?
这里是确切的错误数据:
例外是未处理的:System.AccessViolationException: System.AccessViolationException:尝试读取或写入受保护存储器 。这通常表明其他内存已损坏。
AT- System.Windows.Forms.UnsafeNativeMethods.IWebBrowser2.Navigate2(对象& üRL,对象&标志,对象& targetFrameName,对象& POSTDATA, 对象&头)
AT-系统。 Windows.Forms.WebBrowser.PerformNavigate2(对象& URL, 对象& FLA GS,对象& targetFrameName,对象& POSTDATA,对象& 头)
AT-System.Windows.Forms.WebBrowser.PerformNavigateHelper(字符串 urlString,B oolean newWindow,字符串targetFrameName,字节[] POSTDATA,字符串头)
AT- System.Windows.Forms的.WebBrowser.Navigate(字符串urlString)
AT-Slider.HtmlWindow..ctor(字符串URL)AT- d:\快速\项目\ HTMLSlider \幻灯片r \ HtmlWindow.xaml.cs:行24
at-Slider.Program。 <> C_ DisplayClasse.b _3()AT- d:\快速\项目\ HTMLSlider \滑块\的Program.cs:线123
AT-System.Threading.ThreadHelper.ThreadStart_Context(对象状态)
AT- System.Threading.ExecutionContext.Run(的ExecutionContext 的ExecutionContext,ContextCallback回调,对象状态)
AT- System.Threading.ThreadHelper。ThreadStart()
竞争条件,停止和DocumentText是异步调用,你不希望后台线程完成。 –
你的意思是网页浏览器的后台线程?我该如何等待他们完成? (我怎么知道他们是否正在运行......) –
在DocumentCompleted中做什么。注意设置DocumentText会触发另一个导航,您需要等待另一个DocumentCompleted。调用Dispose之后不要访问该对象。 –