2012-11-13 56 views
3

我想调用特定的打印机来打印我的WPF应用程序。 我有三个打印机 假设 的Printer1用于酒吧的账单打印 PRINTER2厨房账单打印 Printer3为客户账单打印 打印机名称已经保存在数据库中,在打印过程中,我从DB 得到一个打印机名称,并希望从特定的打印机打印在创建打印服务器对象,而不是defaul打印机 这里是我的代码调用特定的打印机来打印C#WPF

var v = new PrinterDAL().GetPrinterSettings(); 
try 
{ 
    System.Threading.Thread thread = new System.Threading.Thread(new 
     System.Threading.ThreadStart(
      delegate() 
      { 
       gridPrint.Dispatcher.Invoke(DispatcherPriority.Normal, 
        new Action(
        delegate() 
        { 
          PrintDialog printDialog = new PrintDialog(); 
          printDialog.PrintQueue = new PrintQueue(
           new PrintServer(@"\\" + v.BarPrinter), ""); 
          printDialog.PrintVisual(gridPrint, ""); 
          this.Close(); 
        } 
       )); 
      } 
      )); 
      thread.Start(); 
} 
catch (Exception ex) 
{ 
    Xceed.Wpf.Toolkit.MessageBox.Show(ex.Message, "", MessageBoxButton.OK, 
             MessageBoxImage.Error); 
} 

我得到一个例外,从这个代码

“发生异常Win32错误:打印机名称无效“。

+0

鉴于我们不介意读者 - v.BarPrinter包含什么? –

+0

它包含打印机的名称,这是此处的错误。你能打印出名字并检查.NET为什么不能与打印机通信? – Legoless

+0

如果答案是正确的。请检查它是否被接受。其他人可以更快地找到答案。 – jlvaquero

回答

8

打印服务器必须使用UNC格式(\\resource)不是打印机名称的计算机或打印机服务器设备是实例:

例如,如果你的计算机的名称,在您的域名,是KashifPC并且已配置打印机,称为“Printer1”,您可以使用:

//example code. no error handling. 
PrintServer localPS = New PrintServer(@"\\KashifPC") 
PrinterQueue printer1 = localPS.GetPrintQueue("Printer1") //v.BarPrinter??? 
PrintDialog printDialog = new PrintDialog(); 
printDialog.PrintQueue = printer1 
//rest of code 
+0

jlvaquero你是辉煌..bundle的thanks.it已解决我的问题。我从最近三天面临这个问题.........谢谢 –

+0

我太高兴了jlvaquero.thanks再次 –