2016-03-04 76 views
1

打印機作業正在運行時,我運行了該程序,似乎沒有拾取任何數據。但它工作,如果程序在打印之前已經運行。這是正常的還是我做錯了?請指教?在打印時沒有讀取數據

static void Main(string[] args) 
    { 
     string printerName = "Printer Name"; 
     string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName); 
     ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 

     while (true) 
     { 
      Console.WriteLine("Not printing"); 

      ManagementObjectCollection coll = searcher.Get(); 
      var alreadyPrinting = false; 
      foreach (ManagementObject printer in coll) 
      { 
       foreach (PropertyData property in printer.Properties) 
       { 
        //Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value)); //To check Printing information 
        if (Convert.ToInt32(printer.Properties["PrinterStatus"].Value) == 4 && !alreadyPrinting) 
        { 

         string printeroutput = "Printer is printing"; 
         SpeechSynthesizer synthensizer = new SpeechSynthesizer(); 
         synthensizer.Volume = 100; 
         synthensizer.Rate = -2; 

         //Synchronous 
         synthensizer.Speak(printeroutput); 
         Console.Write(printeroutput); 
         Console.WriteLine(); 
         alreadyPrinting = true; 
        } 
       } 
       Thread.Sleep(1000); 
      } 

     } 
    } 
+2

這是正常的。兩個操作不能在同一個線程中同時執行。 – Sakura

+0

Yus,我得到了那部分,但因爲它循環和打印機不斷打印不應該它最終拿起它。 –

回答

0

你是 '允許' 來創建多個SpeechSynthesizer。如果其中一臺打印機正在打印,它將每秒創建一個SpeechSynthesizer

是否有可能將SpeechSynthesizer的創建移到外面?

而當它執行synthensizer.Speak(printeroutput);它會阻止你的線程。

+0

Yus,這是可能的,但問題不在於SpeechSynthesizer,謝謝。 –

相關問題