2012-04-19 12 views
5

Estoy tratando de atrapar todos los trabajos de impresión enviados a la impresora en nuestra red local. Quiero mostrar algunas propiedades del trabajo, como el nombre del trabajo, enviar hora, etc.Cómo atrapar trabajos de impresión en C# .NET

Probé un bucle while pero no capturó mi trabajo de impresión, tal vez porque ocurrió mientras el hilo estaba durmiendo. ¿Hay algún evento que pueda registrar y manejar? No quiero gastar todo el recurso de la CPU para esta tarea en bucle infinito.

yo probamos este:

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

EDIT: El código anterior funciona en realidad, no es necesario ir nivel inferior si funciona para ti, mi error fue no configura la impresora predeterminada correctamente .

+1

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

+0

Tenga en cuenta que si está utilizando un bucle foreach que se está ejecutando constantemente, si se producen muchos trabajos de impresión a la vez, el documento que se va a imprimir se puede imprimir antes de encontrar el código es –

+0

Pero, ¿todavía tengo que volver a verificar las tareas de impresión con un temporizador? Creo que no hay ningún tipo de evento JobAdded que pueda enlazar, ¿verdad? –

Respuesta

1

Pruebe la instrumentación de administración de Windows. No es necesario sondear cuando tenemos eventos y delegados. Ver here para una solución.

+0

En el artículo que contiene el enlace provisto, todavía sondea los trabajos. No hay ningún tipo de evento JobAdded en el artículo. ¿Me estoy perdiendo? –

+0

oh, ya veo. Una unidad de impresora podría proporcionar tales eventos, pero efectivamente el conductor estaría haciendo la encuesta. – ldgorman

+0

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

Cuestiones relacionadas