2012-04-19 89 views
5

我试图捕获提交给本地网络中的打印机的每个打印作业。我想显示工作的一些属性,如工作名称,提交时间等。如何在C#.NET中捕获打印作业

我试过了一个while循环,但它没有捕获我的打印作业,也许是因为它在线程正在睡眠时发生。有没有我可以注册和处理的事件?我不想花费所有的CPU资源来完成这项任务。

我尝试这样做:

public static void WritePrinterJobs() 
    { 
     while (true) 
     { 
      foreach (var job in LocalPrintServer.GetDefaultPrintQueue().GetPrintJobInfoCollection()) 
      { 
       Console.WriteLine(job.Submitter + " " + job.TimeJobSubmitted.ToShortDateString()); 
      } 
      Thread.Sleep(100); 
     } 
    } 

编辑: 上面的代码实际工作,你不需要如果它不为你工作,我的错误是没有正确配置默认打印机去低级别。

+1

http://stackoverflow.com/questions/6506916/events -in -printqueue – adt 2012-04-19 13:44:14

+0

让我们注意到,如果你使用的是一直在运行的foreach循环,如果大量的打印作业同时发生,那么打印的文档可能会在代码发现之前被打印出来它 – 2012-04-19 13:48:47

+0

但仍然必须使用计时器再次检查打印作业吗?我认为没有任何JobAdded类型的事件可以挂钩,对吧? – 2012-04-19 13:55:35

回答

1

尝试Windows管理工具。当我们有事件和代表时,无需轮询。有关解决方案,请参阅here

+0

在您提供的链接中包含的文章中,他仍在轮询作业。文章中没有JobAdded类型的事件。我错过了吗? – 2012-04-19 13:53:29

+0

哦,我明白了。打印机驱动器可以提供这样的事件,但实际上驱动程序会进行轮询。 – ldgorman 2012-04-19 14:00:10

+0

你看过[System.printing](http://msdn.microsoft.com/en-us/library/system.printing.aspx) – ldgorman 2012-04-19 14:03:25