如何在C#.NET中捕获打印作业

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

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

我试过这个:

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

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

我找到了解决方案。 对于那些正在寻找处理打印作业事件的方法,请看一下:

FindFirstPrinterChangeNotification

并且还可以找到工作代码监视打印作业

尝试Windows管理工具。 当我们有事件和委托时,无需轮询。 请参阅此处获取解决方案。