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();

msdn のドキュメントによると、最後の行は「ハンドルが無効です」という詳細を含む Win32Exception をスローしています。スローする必要がある唯一の例外は、プリンターが見つからないことです。例外は、ある種のドライバー/非フレームワークの例外であるようです。

プリンター (Lexmark T640、プリンター ポートに直接印刷するようにセットアップ) を選択すると、コードは正常に印刷されますが、アクセスできる他の 2 つのプリンター (別の T640、または Dell カラー) のいずれかを選択すると、コードが失敗します。他の 2 台のプリンターは、中央のプリント サーバーを介して印刷するように設定されていますが、これで違いが生じるとは思いませんでした。誰でも私に何か指針を与えることができますか?

編集: printDialog.PrintQueue.Fullname で試してみましたが、動作に違いはありません。ガベージ プリンター名を代入すると、予想どおり InvalidPrinterException がスローされ、プリンターが見つかったことを示しますが、失敗したようです。

4

3 に答える 3

0

@マットの利益のために。最終的に問題が何であるかを理解することはできませんでした。ネットワークの構成に関係している可能性がありますが、それは私の手に負えません.

代わりに、別の方法を使用しました。以下のように、Interop.WIA の一部である CommonDialogClass.ShowPhotoPrintingWizard() を使用しました。

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

これにより、プロセスが写真印刷ウィザードに引き継がれ、それ以降、問題は発生していません。

于 2011-09-28T08:32:36.107 に答える
0

ターゲット プリンターをデフォルト プリンターとして設定してみて (まだ設定されていない場合)、引き続き発生するかどうかを確認します。

于 2010-02-11T16:41:02.847 に答える