2012-11-13 142 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再次 –