Вопрос

Я получаю странное исключение из следующего кода:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top