2011-10-14 73 views
0

我有一个多线程应用程序,它使用托管在简单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()

+3

竞争条件,停止和DocumentText是异步调用,你不希望后台线程完成。 –

+0

你的意思是网页浏览器的后台线程?我该如何等待他们完成? (我怎么知道他们是否正在运行......) –

+1

在DocumentCompleted中做什么。注意设置DocumentText会触发另一个导航,您需要等待另一个DocumentCompleted。调用Dispose之后不要访问该对象。 –

回答

0

我找不到解决方案。

在应用程序中放置一个WebBrowser,然后创建另一个WebBrowser时,可能会出现内部问题。

我的解决方案是修改我的代码以重新使用WebBrowsers而不是创建新的。 现在,没有WebBrowsers处置后,没有问题。