C# 在WPF中从画布控件打印

C# 在WPF中从画布控件打印,c#,printing,printqueue,C#,Printing,Printqueue,我的应用程序从画布(WPF,C#)打印,但应用程序需要指定默认打印机。默认打印机保存为PC上的.ini文件。概念是,员工可以单击我画布上的“打印”按钮,画布将生成布局,然后发送到打印机 因此,我需要做的两件事是: 根据文本文件中的字符串设置默认打印机 装订后打印 单击“打印”按钮后,画布将更新为我想要的布局(通过数据绑定),作业将发送到打印机(打印机检测到作业并显示在打印机队列中),但打印机从不打印文档。这几乎就像我在排队等待一份工作,但从未说过“开始” 我的佳能然后给我一个错误(这可能是一个红

我的应用程序从画布(WPF,C#)打印,但应用程序需要指定默认打印机。默认打印机保存为PC上的.ini文件。概念是,员工可以单击我画布上的“打印”按钮,画布将生成布局,然后发送到打印机

因此,我需要做的两件事是:

  • 根据文本文件中的字符串设置默认打印机
  • 装订后打印
  • 单击“打印”按钮后,画布将更新为我想要的布局(通过数据绑定),作业将发送到打印机(打印机检测到作业并显示在打印机队列中),但打印机从不打印文档。这几乎就像我在排队等待一份工作,但从未说过“开始”

    我的佳能然后给我一个错误(这可能是一个红色的听证会),这是“另一台打印机正在使用打印机。以下状态是该计算机的使用状态--”

    以下是我正在使用的两种主要方法

    internal void AutoPrint()
    {
            string printerName = GetPrinterNameFromTextFile();
            PrintDialog dialog = new PrintDialog();
            getView(); //queries database, returns model and binds
    
            Print(dialog, config.PrinterName);
    }
    
    internal void Print(PrintDialog dialog, string printerName)                  
    {                  
            Canvas canvas = new Canvas();
            canvas = this.PrintCanvas;
    
            PrintQueue queue = new LocalPrintServer().GetPrintQueue(printerName);
            dialog.PrintQueue = queue;
            Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(delegate()
                {
                    dialog.PrintVisual(canvas, "");
                }));
    }
    

    好的,我问了另外一个问题,但提供了源代码和答案: