GetPrintJobInfoCollection()有时会出现异常

时间:2013-08-14 22:40:33

标签: c# .net printing xps xpsdocument

这段代码似乎无用,它可以重现问题。另一个应用是使用 将打印作业发送到打印机时通知http://printqueuewatch.codeplex.com/。 它有效,但有时当你发送打印作业时,它会在这里崩溃GetPrintJobInfoCollection。 我粘贴了内部异常。要重现我用Notepad ++或我的应用程序发送一个小文本文件大约20次,直到我崩溃。 如果在崩溃后我调用GetPrintJobInfoCollection它成功运行或我重试。

有任何建议如何解决这个问题?

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

中的错误
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 个答案:

答案 0 :(得分:1)

根据this MSDN article,您不应使用 System.Printing 命名空间。

  

不支持使用System.Printing命名空间中的类   在Windows服务或ASP.NET应用程序或服务中。尝试   从这些应用程序类型中的一个使用这些类可能   产生意想不到的问题,例如服务性能下降   和运行时异常。如果要从Windows窗体打印   应用程序,请参阅System.Drawing.Printing命名空间。

我认为您的问题是由于资源泄漏造成的。 LocalPrintServer类似乎是一个非托管资源,需要处理。