PrintDocument.Print() выдает исключение Win32Exception
-
19-09-2019 - |
Вопрос
Я получаю странное исключение из следующего кода:
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 color), код завершается ошибкой.Два других принтера настроены на печать через наш центральный сервер печати, но я не думал, что это должно иметь какое-либо значение.Кто-нибудь может дать мне какие-нибудь указания?
Редактировать:Только что попробовал это с помощью PrintDialog.PrintQueue.Полное имя и поведение ничем не отличаются.Замена имени принтера мусора, как и ожидалось, вызывает исключение InvalidPrinterException, предполагающее, что принтер найден, но, похоже, завершается неудачей.
Решение 2
В интересах @Matt.В конце концов, мне не удалось выяснить, в чем была проблема, вполне могло быть что-то связанное с конфигурацией нашей сети, но это не в моей власти.
Вместо этого я использовал другой метод, я использовал CommonDialogClass.ShowPhotoPrintingWizard(), который является частью Interop.WIA, как показано ниже.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms630492%28v=vs.85%29.aspx
Это передаст процесс мастеру печати фотографий, и с тех пор у меня не возникало никаких проблем.
Другие советы
Попробуйте установить целевой принтер в качестве принтера по умолчанию (если это еще не сделано) и посмотрите, происходит ли это по-прежнему
Я получил это исключение только при печати нескольких документов.Мое решение состояло в том, чтобы добавить
printDocument.Dispose();
после printDocument.Print();
.