2013-08-14 7 views
6

이 코드는 쓸데없는 것처럼 보일 수도 있지만 문제를 재현합니다. 다른 응용 프로그램은 인쇄 작업이 프린터로 전송 될 때 http://printqueuewatch.codeplex.com/을 통보 받기 위해 사용합니다. 인쇄 작업을 보내면 GetPrintJobInfoCollection이 손상 될 수 있습니다. 내부 예외를 붙여 넣었습니다. 내가 충돌을 얻을 때까지 메모장 + + 또는 내 응용 프로그램에 약 20 회 작은 텍스트 파일을 재현하기 위해. 충돌 후 GetPrintJobInfoCollection을 호출하면 성공적으로 작동하거나 다시 시도합니다.GetPrintJobInfoCollection() 예외 가끔

제안 사항 해결 방법?

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 

답변

1

에서

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(); 
} 

오류가 this MSDN article에 따르면 당신은 System.Printing 네임 스페이스를 사용할 수 없습니다.

System.Printing 네임 스페이스 내의 클래스는 Windows 서비스 또는 ASP.NET 응용 프로그램 또는 서비스 내에서 을 사용할 수 없습니다. 이러한 응용 프로그램 유형 중 하나에서 클래스를 사용하려고 시도하면 서비스 중단 및 런타임 예외와 같은 예기치 않은 문제가 발생할 수 있습니다. Windows Forms 응용 프로그램에서 인쇄하려면 System.Drawing.Printing 네임 스페이스를 참조하십시오.

자원 누출 문제가 있다고 생각합니다. LocalPrintServer 클래스는 관리되지 않는 리소스 인 것으로 간주되어 처리해야합니다.