2012-04-19 12 views
5

Sto cercando di rilevare tutti i processi di stampa inviati alla stampante nella nostra rete locale. Voglio mostrare alcune proprietà del lavoro come nome del lavoro, tempo di invio e così via.Come catturare i lavori di stampa in C# .NET

Ho provato un ciclo while ma non ha catturato il mio lavoro di stampa, forse perché è successo mentre il thread stava dormendo. C'è un evento che posso registrare e gestire? Non voglio passare tutta la risorsa della CPU per questa attività a ciclo infinito.

ho provato questo:

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

EDIT: Il codice precedente funziona in realtà, non c'è bisogno di andare piano inferiore se funziona per voi, il mio errore non era corretta configurazione della stampante predefinita .

+1

http://stackoverflow.com/questions/6506916/events -in-printqueue – adt

+0

Si noti che se si utilizza un ciclo foreach costantemente in esecuzione, se si verificano numerosi lavori di stampa contemporaneamente, il documento che verrà stampato potrebbe essere stampato prima che il codice venga trovato it –

+0

Ma devo ancora ricontrollare i lavori di stampa usando un timer? Penso che non ci sia un tipo di evento JobAdded che posso collegare, giusto? –

risposta

1

Provare la strumentazione di gestione di Windows. Non c'è bisogno di sondare quando abbiamo eventi e delegati. Vedi here per una soluzione.

+0

Nell'articolo il tuo link fornito contiene, egli continua a sondare i lavori. Non vi è alcun tipo di evento JobAdded nell'articolo. Mi sto perdendo? –

+0

oh capisco. Un'unità stampante potrebbe fornire tali eventi, ma in effetti il ​​driver eseguirà il polling. – ldgorman

+0

hai esaminato [System.printing] (http://msdn.microsoft.com/en-us/library/system.printing.aspx) – ldgorman