代码之家  ›  专栏  ›  技术社区  ›  Jason Williams

在WinForms中托管IE8并打开PDF

  •  6
  • Jason Williams  · 技术社区  · 15 年前

    我们有一个承载WebBrowser控件的窗体。这是表单上唯一的控件。

    我们将表单传递给一个临时PDF文件的文件路径,它会:

    WebBrowser1.Navigate(Me._PathToPdf)
    

    当表单关闭时,它将远离PDF文件:

    WebBrowser1.Hide()
    WebBrowser1.Navigate("about:blank")
    
    Do Until WebBrowser1.ReadyState = WebBrowserReadyState.Complete
        Application.DoEvents()
        System.Threading.Thread.Sleep(50)
    Loop
    

    一旦表单关闭,调用类就会删除临时的PDF文件。

    这个过程很有效…直到我们安装了Internet Explorer 8。出于某种原因,IE8和AdobeAcrobat 8(或9)的组合会导致在临时PDF文件上放置额外的文件锁定句柄。在整个应用程序关闭之前,额外的锁句柄不会消失。我还应该提到,在Acrobat打开文件之前,文件上没有锁。

    我们可以在多台机器上复制它,它总是IE8和AdobeAcrobat Reader的组合。我们可以安装Foxit Reader 3而不是Adobe Acrobat,一切正常。同样,我们可以在一台装有IE7和AdobeAcrobat的机器上运行这个应用程序,一切都很好。但是,当你把IE8和杂技演员的魔法药水混合在一起的时候,你会变得一团糟。

    有人能告诉我为什么我会得到一个额外的文件锁,它一直持续到应用程序结束?

    谢谢。

    下面是一个演示我的问题的示例应用程序: PDFLockProblemDemo.zip

    4 回复  |  直到 15 年前
        1
  •  1
  •   Lucas    15 年前

    WebBrowser


    this post AxAcroPDFLib.AxAcroPDF

    axAcroPDF1.LoadFile("mypdf.pdf");
    axAcroPDF1.Show();
    
        2
  •  1
  •   user890332    13 年前


    1. Dim filesToDelete As List(Of String) = New List(Of String)



    2. webbrowser1.navigate("blank.pdf" )

    3. filesToDelete.Add(filename)






    4. TreeView1_BeforeSelect

      If filesToDelete.Count > 0 Then
      For Each f As String In filesToDelete
      File.Delete(f)
      Next
      filesToDelete.Clear()
      End If




        3
  •  1
  •   Siddharth Rout    12 年前

        4
  •  0
  •   Siddharth Rout    12 年前