PrintDocument.Print () генерирует исключение Win32Exception - PullRequest
3 голосов
/ 06 января 2010

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

 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, предполагая, что он нашел принтер, но, похоже, произошел сбой.

Ответы [ 3 ]

0 голосов
/ 28 сентября 2011

Для пользы @ Мэтта. Мне не удалось выяснить, в чем проблема, в конце концов, вполне может быть что-то делать с конфигурацией нашей сети, но это не в моих руках.

Вместо этого я использовал другой метод, я использовал CommonDialogClass.ShowPhotoPrintingWizard (), который является частью Interop.WIA, как показано ниже.

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

Этот процесс передается мастеру печати фотографий, и с тех пор у меня не возникло никаких проблем.

0 голосов
/ 25 октября 2017

Я получил это исключение только при печати нескольких документов. Моим решением было добавить

printDocument.Dispose(); после printDocument.Print();.

0 голосов
/ 11 февраля 2010

Попробуйте установить целевой принтер в качестве принтера по умолчанию (если он еще не установлен) и посмотрите, происходит ли это все еще

...