我正在寻找一种从特定打印机获取作业列表或数量的方法。在最佳情况下,我希望有一个“作业对象”,它代表一个打印作业及其在打印队列中的名称。

这是必需的,因为我需要监视打印机的状态,以便可以用新一批的文档重新填充打印队列,而不会导致打印后台处理程序溢出

提前致谢!

编辑:添加了解决方案的代码片段

private int GetNumberOfPrintJobs()
{
    LocalPrintServer server = new LocalPrintServer();
    PrintQueueCollection queueCollection = server.GetPrintQueues();
    PrintQueue printQueue = null;

    foreach (PrintQueue pq in queueCollection)
    {
        if (pq.FullName == PrinterName)
            printQueue = pq;
    }

    int numberOfJobs = 0;
    if (printQueue != null)
        numberOfJobs = printQueue.NumberOfJobs;

    return numberOfJobs;
}

最佳答案

您可以在System.Printing命名空间中使用.NET 3.0 PrintQueue类。它的NumberOfJobs属性告诉您队列中有多少个作业,GetPrintJobInfoCollection()返回所有作业的详细信息。请注意,它没有任何事件可通知您作业集合已更改,因此需要使用计时器进行轮询。一秒钟左右应该没事。

10-07 23:34