2013-11-01 75 views
0

我最近问这个问题有几个相关的问题,但这次我想尽可能直接地考虑到我在开发过程中所担心的问题。在c#中检查打印机状态?

我们正试图通过移动打印机打印门票和需要确定打印机是否联机,脱机或者,如果有一个错误,所以我们可以更好地处理它: enter image description here

这里又是一个片段我代码时,我打印,但似乎无法如果发生任何问题,得到它的陷阱:

  Process process = new Process(); 
      //process.StartInfo.CreateNoWindow = true; 
      process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      process.StartInfo.FileName = defFile; 
      if (rwPrinter.Length > 0) 
      { 
       process.StartInfo.Verb = "printto"; 
       //process.StartInfo.Verb = (Path.Combine(System.Windows.Forms.Application.StartupPath, "printto.exe")); 
       process.StartInfo.Arguments = "\"" + rwPrinter + "\""; 
      } 
      else 
      { 
       process.StartInfo.Verb = "print"; 
      } 

      try 
      { 
       process.Start(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

原谅我的轻率这个,因为我有一个老板是不耐烦了我所希望得到这个工作,并请建议如何让这个错误陷阱,谢谢。

+0

你看过[MSDN上显示的示例](http://msdn.microsoft.com/en-us/library/aa970845.aspx)?这使用System.Printing.PrintServer类来确定给定的打印服务器的状态。 –

+0

也可以查看[PrinterSettings类](http://msdn.microsoft.com/de-de/library/system.drawing.printing.printersettings%28v=vs.110%29.aspx)获取打印机状态信息。 – pasty

+0

在PrinterSettings示例中,我发现它在确定设置之前尝试打印文本文档。有没有办法不这样测试? – jfalberg

回答

0

对于事后处理问题,您可以等待退出,然后检查ExitCode。如果处理打印的过​​程非常好以报告有意义的代码,则可以显示更多有意义的消息,但这取决于所调用的过程。

try 
{ 
     process.Start(); 
     process.WaitForExit(); 
     if (process.ExitCode >0) 
     { 
      MessageBox.Show(String.Fromat("print failed, exit code :{0} ", process.ExitCode)); 
     } 
} 
catch (Exception ex) 
{ 
     MessageBox.Show(ex.Message); 
} 
+0

尽管我非常希望这会解决我的问题,但当我尝试调试此问题并有意将我的移动打印机变为脱机并最终联机时,它看起来像是以某种方式卡在“process.WaitForExit()”行中。 – jfalberg

+0

打印过程是哪个过程? – rene

+0

这是一个“打印”过程。看起来像我的问题是类似于以下未答复的问题在http://stackoverflow.com/questions/14455964/c-sharp-printer-properties-wmi – jfalberg