最后咬紧牙关,用导航到.pdf的适当 SL5 Trusted In-Browser WebBrowser 替换了我在 silverlight 应用程序中显示 PDF 内容的技巧。
当我尝试将 WebBrowser重新导航到另一个 PDF时,我看到错误“尝试撤销尚未注册的放置目标(HRESULT 异常:0x80040100)”
这仅在我部署到 IIS(本地 IIS和另一台服务器 IIS 7.5)时发生......在 VS2010 中运行时不会发生。
细节:
用户界面非常简单。1 个网格,带 2 列:
第1栏第2栏
================================================ ==============================
树视图 <WebBrowser x:Name="ContentWebBrowser" Grid.Column="1"></WebBrowser>
当用户在树视图中选择一个项目时,我只需调用:
Uri serverUri = new Uri(string.Format("http://{0}:{1}/",
Application.Current.Host.Source.DnsSafeHost,
Application.Current.Host.Source.Port));
var relative= "/Content/x/y/z.pdf"; //This is dynamiclly pulled from Treeview, EDITED FOR SO
Uri relativeUri = new Uri(relative, UriKind.Relative);
ContentWebBrowser.Navigate(new Uri(serverUri, relativeUri));
使用 Cassini 通过 VS2010 运行带和不带调试器的 silverlight,我可以在我的列表视图中逐项选择项目,并且我的 WebBrowser 将“重新导航”调用上面相同的代码。但是,一旦我部署到本地 iis,任何时候我最终第二次调用 Navigate 都会收到此错误:
System.Exception: Trying to revoke a drop target that has not been registered (Exception from HRESULT: 0x80040100)
at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
at MS.Internal.XcpImports.WebBrowser_Navigate(DependencyObject obj, Uri source)
at System.Windows.Controls.WebBrowser.Navigate(Uri source)
at SystemUtilities.Views.WebContentListView.TreeViewItem_Selected(Object sender, RoutedEventArgs e)
其他怪事:有时我可以“重新导航” 3 或 4 次,然后才看到此异常。有时当我在我的 SL 应用程序中加载另一个页面时,会抛出此错误。当我将 PDF 加载到 WebBrowser 时,无论是否缓存 PDF,都会发生这种情况。如果我显示标准 html 或图像而不是 PDF,则不会发生这种情况。
编辑:我添加了逻辑来检查以确保在尝试重新导航 WebBrowser 之前触发 LoadCompleted 事件,但这似乎并不重要。(不是 100% 确定,但我认为它忽略了 PDF 可能仍在加载的事实,只是表示 DOM 已准备好)。虽然,即使在看起来第一个 pdf 完成加载后我想要很长时间(30 秒),我仍然会收到错误消息。
有什么建议么?
新我在 skydrive 上发布了我的示例。查看自述文件以进行复制!: http: //sdrv.ms/JSn1KB