2012-04-19 55 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