Как получить информацию о завершении задания на печать

Я хочу получать информацию, когда задание на печать завершено с использованием C#

Я пользуюсь C# Winform. Интересно, есть ли способ вызвать событие, когда задание печати завершено в указанной очереди печати. ​​Я пробовал следующие решения:

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

Я также использовал PrintQueue.GetPrintJobInfoCollection() который возвращает массив PrintSystemJobInfo это не вызывает никакого события. Я должен периодически запрашивать их статус и приводит к той же самой проблеме, как я упоминал выше.

Хотя я не думаю, что мой грязный код требуется здесь, но я все равно вставлю его.

public static PrintQueue GetPrintQueue(string printerName)
        {
            PrintQueue targetPrintQueue = null;
            using (LocalPrintServer printServer = new LocalPrintServer())
            {
                PrintQueueCollection printQueuesOnLocalServer =
                    printServer.GetPrintQueues(new[] {EnumeratedPrintQueueTypes.Local});
                targetPrintQueue =
                    (from PrintQueue printQueue in printQueuesOnLocalServer
                        where printQueue.Name == printerName
                        select printQueue).FirstOrDefault();
            }

            return targetPrintQueue;
        }

public static List<PrintSystemJobInfo> GetPrintJobs(string printerName)
        {
            PrintQueue targetPrintQueue = GetPrintQueue(printerName);
            if (targetPrintQueue != null)
            {
                targetPrintQueue.Refresh();
                return targetPrintQueue.GetPrintJobInfoCollection().ToList();
            }
            else
            {
                throw new Exception();
            }
        }

БОЛЬШЕ ИНФОРМАЦИИ

Я очень внимательно прочитал FindNextPrinterChangeNotification (по крайней мере, я думаю, что я достаточно осторожен) и не обнаружил никаких признаков того, что задание на печать выполнено в pdwChangeЕсли этот API отвечает требованиям, которые я описал выше, кто-то любезно предоставит мне более подробную информацию о реализации или пример или что-то?

1 ответ

Чтобы добиться обработки событий для печати, вы должны использовать функцию FindFirstPrinterChangeNotification.

Другие вопросы по тегам