Я получаю странное исключение из следующего кода:
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 или цвет dell), код завершается ошибкой ,
Два других принтера настроены для печати через наш центральный сервер печати, но я не думаю, что это должно иметь какое-либо значение.
Кто-нибудь может дать мне какие-нибудь указатели?
Edit: только что попробовал это с printDialog.PrintQueue.Fullname и поведение не отличается. Подстановка имени принтера-мусора вызывает ожидаемое исключение InvalidPrinterException, предполагая, что он нашел принтер, но, похоже, произошел сбой.