2011-04-06 166 views
0

使用InternetExplorer对象,我可以打印网页。但是,当我尝试打印文件时,出现以下错误:打印文件时出现错误,但打印网页时出错

System.Runtime.InteropServices.COMException: The object invoked has disconnected from its clients.

我在做什么错?

下面的代码(感谢this answer):

public class Program 
{ 
    static void main(string[] args) 
    { 
     // this works 
     (new HTMLPrinter()).Print("www.google.com"); 

     // this brings up the file in a browser 
     // but then throws an exception when checking print status! 
     (new HTMLPrinter()).Print("C:\Temp\test.html"); 
    } 
} 

public class HTMLPrinter 
{ 
    private bool documentLoaded; 
    private bool documentPrinted; 

    private void ie_DocumentComplete(object pDisp, ref object URL) 
    { 
     documentLoaded = true; 
    } 

    private void ie_PrintTemplateTeardown(object pDisp) 
    { 
     documentPrinted = true; 
    } 

    public void Print(string htmlFilename) 
    { 
     documentLoaded = false; 
     documentPrinted = false; 

     InternetExplorer ie = new InternetExplorerClass(); 
     ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete); 
     ie.PrintTemplateTeardown += new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(ie_PrintTemplateTeardown); 

     object missing = Missing.Value; 

     ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing); 

     // An exception is thrown at 
     // SHDocVw.InternetExplorerClass.QueryStatusWB 
     // only when trying to print a file! 
     // Exception details: System.Runtime.InteropServices.COMException: 
     // The object invoked has disconnected from its client. 
     while (!documentLoaded && ie.QueryStatusWB(OLECMDID.OLECMDID_PRINT) != OLECMDF.OLECMDF_ENABLED) 
      Thread.Sleep(100);   

     ie.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing); 
     while (!documentPrinted) 
      Thread.Sleep(100); 

     ie.DocumentComplete -= ie_DocumentComplete; 
     ie.PrintTemplateTeardown -= ie_PrintTemplateTeardown; 
     ie.Quit(); 
    } 
} 
+0

我将google网页保存到磁盘,并打印了一个。似乎它与我的HTML文件有关。 – MCS 2011-04-06 15:42:36

回答

0

身份运行程序管理员。