C# 打印作业从假脱机队列中消失

C# 打印作业从假脱机队列中消失,c#,printing,spool,C#,Printing,Spool,我正在编写一个C#应用程序,以便在本地打印机上打印PDF,并在本地打印机出现故障时重定向网络打印机上的打印任务 问题:当我通过windows spool向本地打印机发送任务时,即使打印机出现错误(如缺纸),作业也会在几秒钟后从spool中消失。然而,如果我在失败后将纸张放入打印机,文档将被打印(但仍不会显示在卷轴中) 似乎打印机会缓冲打印任务,即使它不工作 这是我的打印代码: // using PdfiumViewer; public static void PrintPdf(string p

我正在编写一个C#应用程序,以便在本地打印机上打印PDF,并在本地打印机出现故障时重定向网络打印机上的打印任务

问题:当我通过windows spool向本地打印机发送任务时,即使打印机出现错误(如缺纸),作业也会在几秒钟后从spool中消失。然而,如果我在失败后将纸张放入打印机,文档将被打印(但仍不会显示在卷轴中)

似乎打印机会缓冲打印任务,即使它不工作

这是我的打印代码:

// using PdfiumViewer;

public static void PrintPdf(string path, ManagementObject printer)
{
    PdfDocument doc = PdfDocument.Load(path);
    PrintDocument pd = doc.CreatePrintDocument();

    pd.PrinterSettings.FromPage = 1;
    pd.PrinterSettings.ToPage = doc.PageCount;
    pd.PrinterSettings.PrinterName = printer["Name"].ToString();

    ClearPrintQueue(printer["Name"].ToString());

    if ((bool)printer["WorkOffline"])
        throw new UnavailablePrinterException("L'imprimante est hors ligne.");
    else
        pd.Print();
}

如何避免打印机缓冲,或者至少检测到作业失败并取消它?

这对于System.Printing命名空间来说是完全正常的行为。最初认为它不够有用,不能包含在.NET2.0中,它应该一直保持这种状态。但不幸的是,WPF依赖于它。对此你无能为力,只能大喊大叫,从不使用它。@HansPassant那么不使用它我该怎么办呢?每周打印数十亿文档,数百万打印机用纸,而不需要System.Printing的“帮助”。您将学会在没有它的情况下生活。这对于System.Printing命名空间来说是完全正常的行为。最初认为它不够有用,不能包含在.NET2.0中,它应该一直保持这种状态。但不幸的是,WPF依赖于它。对此你无能为力,只能大喊大叫,从不使用它。@HansPassant那么不使用它我该怎么办呢?每周打印数十亿文档,数百万打印机用纸,而不需要System.Printing的“帮助”。你将学会没有它的生活。