2017-06-27 3 views
-1

Je suis en train d'afficher les travaux d'impression actuellement en file d'attente d'impression d'une imprimante par défaut sur la console en utilisant ce code:NullReferenceException lancée par GetPrintJobInfoCollection() en essayant d'obtenir les travaux d'impression de l'imprimante par défaut

for (;;) 
{ 
    string printerName = new System.Drawing.Printing.PrinterSettings().PrinterName; 
    System.Printing.LocalPrintServer localPrintServer = new System.Printing.LocalPrintServer(); 
    System.Printing.PrintQueueCollection printQueues = localPrintServer.GetPrintQueues(new[] { System.Printing.EnumeratedPrintQueueTypes.Local, System.Printing.EnumeratedPrintQueueTypes.Connections }); 

    if (printQueues == null) return; 

    System.Printing.PrintQueue queue = printQueues.Where(x => x.Name.Equals(printerName)).FirstOrDefault(); 
    if (queue.NumberOfJobs <= 0) 
     Console.WriteLine("Queue Empty!"); 
    else 
    { 
     Console.WriteLine("Number of Jobs: " + queue.NumberOfJobs); 
     foreach (System.Printing.PrintSystemJobInfo psji in queue.GetPrintJobInfoCollection()) 
     { 
      Console.WriteLine(psji.Name); 
     } 
     Console.WriteLine("\n\nPress any key to exit..."); 
     Console.ReadLine(); 
     break; 
    } 
} 

Lorsque il n'y a aucun élément dans la file d'attente d'impression il affiche avec succès "Queue Vide!".

Mais quand je commence l'impression de document, NumberOfJobs = 1 mais GetPrintJobInfoCollection() lance NullReferenceException.

Pourquoi il y a un travail et toujours son retour null?

Quelle peut être la raison?

De plus, je n'ai pas d'imprimante alors j'essaye de l'imprimer sur "Microsoft Print to PDF".

+1

l'a-t-il imprimé au moment où vous venez de l'afficher? – BugFinder

+0

@BugFinder Non, mais dès qu'un travail est envoyé dans la file d'attente. –

+0

Aussi ce n'est pas un doublon de la question @PatrickHofman mentionné. Je sais pourquoi 'NullReferenceException' est levé. Mais ma question est pourquoi cette fonction jette même s'il y a des données dans la collection. Veuillez supprimer le drapeau Dupliquer. –

Répondre

2

Si vous regardez le Microsoft link il montre qu'il actualise la file d'attente avant de demander GetPrintJobInfoCollection.

Alors que, il semble logique que vous venez d'attraper la file d'attente à quel point il peut être démodé, le fait que leur exemple actualise spécifiquement suggère que c'est la voie à suivre.