LocalPrintServer GetPrintQueue的作业结果排序错误

时间:2016-01-11 20:40:03

标签: c# printing .net-4.0 queue

我使用以下例程来获取打印机队列作业。出于某种原因,他们似乎处于错误的顺序......

常规获取打印机作业列表:

private List<string> GetPrinterQueueJobs(string targetPrinterName)
{
    List<string> jobs = new List<string>();

    string unc = null;
    string printerName = targetPrinterName;
    if (printerName.Contains("\\"))
    {
        string[] printerNameParts = printerName.Split('\\');
        unc = printerNameParts[0];
        printerName = printerNameParts[1];
    }

    PrintQueue printQue = null;
    if (unc == null)
    {
        //local printer
        printQue = new LocalPrintServer().GetPrintQueue(printerName);
    }
    else
    {
        //remote printer
        printQue = new PrintServer(unc).GetPrintQueue(printerName);
    }

    foreach (PrintSystemJobInfo queItem in printQue.GetPrintJobInfoCollection())
    {
        jobs.Insert(queItem.PositionInPrintQueue - 1, queItem.Name);
    }

    return jobs;
}

常规用法:

private void cbPrinters_SelectedIndexChanged(object sender, EventArgs e)
{
    List<string> printers = GetListOfPrinters();

    ComboBox cb = (ComboBox)sender;
    string printerName = cb.Text;

    if (printers.Contains(printerName))
    {
        List<string> printerQue = GetPrinterQueueJobs(printerName);
        foreach (string queItem in printerQue)
        {
            ListViewItem lvi = new ListViewItem(queItem);

            lvPrintQueue.Items.Add(lvi);
        }
    }
}

这就是Windows打印队列的样子: Windows Print Queue

这就是我的结果: Returned Job Results

正如你在这种情况下所看到的,它们是倒置的。疯狂的是,当单步执行例程时,我还会检查“PositionInPrintQueue”属性,它似乎认为作业实际上是按照我返回的结果中显示的顺序。

为什么会这样?有没有人对如何以正确的顺序返回它们有任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明Windows打印机队列没有按顺序显示项目!默认情况下,它不会显示作业的顺序! Windows打印机队列中没有“队列ID”,“队列索引”或“作业顺序”列的类型。查看作业时,您可以按作业名称,状态,所有者,页面,大小,端口和提交进行排序。

如果您按提交排序,则它们都应与GetPrintJobInfoCollection()方法中返回的结果相匹配。但最后,不要相信Windows Printer Queue的作业顺序,请相信GetPrintJobInfoCollection()方法中返回的顺序。