LocalPrintServer GetPrintQueue 的作业结果顺序错误
Job Results From LocalPrintServer GetPrintQueue Are In Wrong Order
我使用以下例程来获取我的打印机队列作业。由于某种原因,它们的顺序似乎错误...
获取打印机作业列表的例程:
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 打印队列的样子:
这是我的结果:
正如您在本例中看到的那样,它们是倒置的。疯狂的是,在逐步执行例程时,我还检查了 "PositionInPrintQueue" 属性 并且似乎认为这些作业实际上是按照我返回的结果中显示的顺序排列的。
为什么会这样?有没有人知道如何让它们以正确的顺序返回?
谢谢!
事实证明 Windows 打印机队列没有按顺序显示项目!默认情况下,它不会显示作业的顺序! Windows 打印机队列中没有 "Queue Id"、"Queue Index" 或 "Job Order" 列的类型。查看职位时,您可以按职位名称、状态、所有者、页面、大小、端口和提交排序。
如果您按提交排序,它们应该都与 GetPrintJobInfoCollection()
方法中返回的结果相匹配。但最后,不要相信 Windows 打印机队列的作业顺序,相信 GetPrintJobInfoCollection()
方法中返回的顺序。
我使用以下例程来获取我的打印机队列作业。由于某种原因,它们的顺序似乎错误...
获取打印机作业列表的例程:
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 打印队列的样子:
这是我的结果:
正如您在本例中看到的那样,它们是倒置的。疯狂的是,在逐步执行例程时,我还检查了 "PositionInPrintQueue" 属性 并且似乎认为这些作业实际上是按照我返回的结果中显示的顺序排列的。
为什么会这样?有没有人知道如何让它们以正确的顺序返回?
谢谢!
事实证明 Windows 打印机队列没有按顺序显示项目!默认情况下,它不会显示作业的顺序! Windows 打印机队列中没有 "Queue Id"、"Queue Index" 或 "Job Order" 列的类型。查看职位时,您可以按职位名称、状态、所有者、页面、大小、端口和提交排序。
如果您按提交排序,它们应该都与 GetPrintJobInfoCollection()
方法中返回的结果相匹配。但最后,不要相信 Windows 打印机队列的作业顺序,相信 GetPrintJobInfoCollection()
方法中返回的顺序。