次のコードから奇妙な例外が発生します。
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 がスローされ、プリンターが見つかったことを示しますが、失敗したようです。