3

我从以下代码中得到一个奇怪的异常:

 var printDialog = new PrintDialog();
        printDialog.ShowDialog();

        var printDocument = new PrintDocument { DefaultPageSettings = { Landscape = true, PrinterSettings = new PrinterSettings { PrinterName = printDialog.PrintQueue.Name } } };

        var updateResult = new UpdateResult<Image>(UpdateType.Print) { Success = true };
        foreach (string location in fileLocation)
        {
            try
            {
                _printImage = Image.FromFile(location);
                printDocument.PrintPage += PrintRequest;
            }
            catch (Exception exception)
            {
               //various error handling code here
            }
        }
        printDocument.Print();

最后一行是抛出一个带有详细信息“句柄无效”的 Win32Exception,根据 msdn 文档,唯一应该抛出的异常是找不到打印机。异常似乎是某种驱动程序/非框架异常。

当我选择我的打印机(Lexmark T640,设置为直接打印到打印机端口)时,代码打印正常,但是选择我可以访问的其他两台打印机(另一台 T640 或戴尔颜色)中的任何一台,代码都会失败。另外两台打印机设置为通过我们的中央打印服务器进行打印,但我认为这不会有任何区别。任何人都可以给我任何指示吗?

编辑:刚刚尝试使用 printDialog.PrintQueue.Fullname 并且行为没有什么不同。替换为垃圾打印机名称会按预期抛出 InvalidPrinterException,表明它已找到打印机,但似乎失败了。

4

3 回答 3

0

尝试将目标打印机设置为默认打印机(如果还没有),看看它是否仍然发生

于 2010-02-11T16:41:02.847 回答
0

为了@Matt 的利益。我没能弄清楚到底是什么问题,很可能与我们的网络配置有关,但这不在我的掌控之中。

相反,我使用了不同的方法,我使用了 CommonDialogClass.ShowPhotoPrintingWizard(),它是 Interop.WIA 的一部分,如下所示。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms630492%28v=vs.85%29.aspx

这会将过程移交给照片打印向导,此后我没有遇到任何问题。

于 2011-09-28T08:32:36.107 回答
0

仅在打印多个文档时才出现此异常。我的解决方案是添加

printDocument.Dispose();之后printDocument.Print();

于 2017-10-25T16:25:51.667 回答