c# - 检测 PrintDocument 何时成功打印(不仅仅是预览)

标签 c# .net winforms printing

我正在使用 PrintDocument 进行一些自定义打印在我的申请中。当我们的项目成功打印时,我需要记录。我最初是通过以下方式实现的:

 print_doc.EndPrint += (o,e) => printed_callback ();

让我的 printed_callback 在打印完成时被调用。但是,既然我添加了预览支持,我将以完全相同的方式构造的 PrintDocument 传递到 PrintPreviewDialog 中。 .这样做会导致在初始呈现预览所需的打印输出后调用 EndPrint 事件。

因此,即使用户点击“预览”然后关闭预览,我们的日志记录代码也会被调用。

关于如何区分真实打印输出和“预览打印”的任何建议?不幸的是,对于传递给 PrintPreviewDialogPrintDocument,我不能不连接到 EndPrint,因为用户可能会单击“打印”按钮在预览对话框中并触发打印输出。

最佳答案

好的,所以我实际上设法自己解决了这个问题,使用 PrintDocument.PrintController属性,并检查 Controller 的 IsPreview 属性。我的最终编码如下:

doc.EndPrint += (o,e) =>
{
    if (doc.PrintController.IsPreview)
        return;

    print_callback ();
}

关于c# - 检测 PrintDocument 何时成功打印(不仅仅是预览),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6270546/

相关文章:

c# - 如何以编程方式获取 .Net WinForms 控件的屏幕截图?

c# - 如果方法对引用类型执行操作,是否需要返回它?

c# - 如何在Entity框架中应用事务

.net - 免费 ~90% Gen2 .NET 堆

c# - 加载 X509Certificate2 结束并出现 Windows Server 2012 上发生内部错误

c# - DataGridView 只读 "bug"

c# - Xamarin 圆形图像按钮

javascript - HtmlOptions.OnLoadScript 无法使用 ABCPdf 创建 PDF

c# - 基于值的线程同步

c# - 如何避免通过winform向表中输入重复值?