Проблема печати фоновых нитей - PullRequest
1 голос
/ 29 июня 2011

Я не уверен, если это связано с поточностью или нет.

Я печатаю этикетки на стандартном принтере Windows.Метка рисуется в GDI и затем передается другому объекту, который печатает его в фоновом потоке.

Я использую BackgroundWorker для этого процесса.LabelPrinter.Print(Label as PrintLabel) запускает backgroundWorker и передает ему данные метки.Обработчик событий PrintPage отображает страницу и отправляет ее на принтер.

Проблема заключается в том, что пользователи иногда получают сообщение об ошибке:

System.Drawing.Printing.InvalidPrinterException: Settings to access printer '\\printserver\label' are not valid.
   at System.Drawing.Printing.PrinterSettings.GetHdevmodeInternal()
   at System.Drawing.Printing.PrinterSettings.GetHdevmode(PageSettings pageSettings)
   at System.Drawing.Printing.PrintController.OnStartPrint(PrintDocument document, PrintEventArgs e)
   at System.Drawing.Printing.StandardPrintController.OnStartPrint(PrintDocument document, PrintEventArgs e)
   at System.Drawing.Printing.PrintController.Print(PrintDocument document)
   at System.Drawing.Printing.PrintDocument.Print()

Пользователи получают это только изредка, хотя мне сообщилихуже, когда там печатают несколько этикеток подряд (несколько минут между этикетками).Они смогут печатать этикетки весь день, когда они неожиданно нажмут эту ошибку и получат ее 4 или 5 раз, тогда проблема, как правило, исчезнет.

Ответы [ 2 ]

4 голосов
/ 29 июня 2011

Это проблема, вызванная драйвером принтера.Вызвать собственную функцию API DocumentProperties () не удалось.К сожалению, у него нет хорошего способа точно указать, что не так, возврат ошибки не означает ничего больше, чем «это не сработало».Помимо стандартного подхода «обновить драйвер», лучше всего обратиться к производителю принтера за поддержкой.Они захотят точно знать, что еще может происходить с этим принтером во время сбоя вызова.Включая состояние принтера и кто-то возится со свойствами принтера.

Если это исключение повторяется хорошо, то перехват исключения возможен.Это происходит очень рано, прежде чем что-либо делать с принтером.Спи пару секунд и попробуй еще раз.Не повторяйся вечно.

1 голос
/ 30 июня 2011

Если принтер является сетевым принтером (имеет порт Ethernet), вы можете попробовать напрямую установить связь с этим принтером вместо использования общей папки принтера (\ server \ printer). Под прямым словом я имею в виду , устанавливающий его как локальный принтер tcp / ip .

У меня всегда было больше надежности при такой связи с принтерами, чем при использовании общих принтеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...