Как получить информацию о завершении задания на печать
Я хочу получать информацию, когда задание на печать завершено с использованием 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.