2013-08-14 21 views
6

Questo codice che potrebbe sembrare inutile riproduce il problema. Un'altra applicazione utilizza http://printqueuewatch.codeplex.com/ per ricevere una notifica quando un lavoro di stampa viene inviato alla stampante. Funziona ma a volte quando si invia un lavoro di stampa si blocca qui GetPrintJobInfoCollection. Ho incollato l'eccezione interna. Per riprodurre invio con Notepad ++ o la mia applicazione un piccolo file di testo circa 20 volte fino a quando non si verifica un arresto anomalo. Se dopo l'arresto si chiama GetPrintJobInfoCollection, funziona correttamente o riprovo.GetPrintJobInfoCollection() Eccezione a volte

Qualche suggerimento su come risolvere questo problema?

while (true) 
{ 
    Thread.Sleep(10); 

    LocalPrintServer server = new LocalPrintServer(); 

    var q = server.GetPrintQueue("vp1"); 
    q.Refresh(); 
    // Debug.WriteLine(q.IsBusy); 
    PrintJobInfoCollection infos = null; 
    infos = q.GetPrintJobInfoCollection(); 
} 

Errore in

System.NullReferenceException was unhandled Message=Object reference 
not set to an instance of an object. Source=System.Printing 
StackTrace: 
    at MS.Internal.PrintWin32Thunk.AttributeNameToInfoLevelMapping.InfoLevelCoverageList.Release() 
    at MS.Internal.PrintWin32Thunk.EnumDataThunkObject.GetPrintSystemValuesPerPrintJobs(PrintQueue 
printQueue, Queue`1 printObjectsCollection, String[] propertyFilter, 
UInt32 firstJobIndex, UInt32 numberOfJobs) 
    at System.Printing.PrintJobInfoCollection..ctor(PrintQueue printQueue, String[] propertyFilter) 
    at System.Printing.PrintQueue.GetPrintJobInfoCollection() 
    at WpfApplication7.MainWindow.button2_Click(Object sender, RoutedEventArgs e) in 

risposta

1

Secondo this MSDN article non si deve usare System.Printing namespace.

classi all'interno del namespace System.Printing non sono supportati per l'utilizzo all'interno di un servizio di Windows o un'applicazione o un servizio ASP.NET. Il tentativo di utilizzare queste classi da uno di questi tipi di applicazioni con potrebbe causare problemi imprevisti, ad esempio la riduzione delle prestazioni del servizio e le eccezioni di run-time. Se si desidera stampare da un'applicazione Windows Form , consultare lo spazio dei nomi System.Drawing.Printing.

Sto pensando che il tuo problema sia dovuto alla perdita di risorse. La classe LocalPrintServer sembra essere una risorsa non gestita e deve essere eliminata.

Problemi correlati