2013-10-14 43 views
0

我有一個小的C#應用​​程序與服務器通信,並通過API請求,使用POST方法獲取一些數據。順便說一下,它是一個Apache服務器。c#BackgroundWorker pause

我的問題是我的C#應用​​程序連續發送大量的請求,並且服務器創建了大量的日誌文件。

我使用BackgroundWorker,我想暫停它幾秒鐘,但Thread.Sleep(5000)不起作用。

這個應用程序運行在系統托盤中,它沒有GUI,只是獲取一些內容,然後將它們打印出來。

代碼:

private void _bgWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     JSONParser parser = new JSONParser(_config.Prop.server + "content/api.php", "print", "getAll");    

     try 
     { 
      while (!_bgWorker.CancellationPending) 
      { 
       try 
       { 
        JSONPrintNeeds needs = parser.DownloadAll();       
        List<JSONPrintNeed> temp = new List<JSONPrintNeed>(); 

        foreach (JSONPrintNeed need in needs.data) 
        { 
         temp.Add(need); 
        } 

        foreach (JSONPrintNeed need in temp) 
        { 
         Printer printer = new Printer(need.megrendeles); 
         printer.PrintController = new StandardPrintController(); 

         List<String> installed = new List<String>(); 

         for (int i = 0; i < PrinterSettings.InstalledPrinters.Count; i++) 
         { 
          installed.Add(PrinterSettings.InstalledPrinters[i]); 
         } 

         if (installed.Contains(need.nyomtato)) 
         { 
          printer.PrinterSettings.PrinterName = need.nyomtato; 
         } 

         int format = int.Parse(need.format); 

         switch (format) 
         { 
          case 0: 
          default:   // txt 
           printer.Print(); 
           break; 
          case 1:    // html 
           SetDefaultPrinter(need.nyomtato); 
           browser.DocumentText = need.megrendeles; 
           browser.Print(); 
           break; 
         } 

         JSONResult result = parser.DeleteOne(int.Parse(need.ny_id)); 
        } 

        parser.DeleteAll(); 
        Thread.Sleep(5000); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine(ex.Message); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
+1

Expand'Thread.Sleep(5000)'does not work –

+1

'Thread.Sleep' does not work?你如何做出這樣的決定? –

+0

你應該閱讀這 [http://stackoverflow.com/questions/10287650/send-a-backgroundworker-to-sleep-while-checking-for-cancellation][1] [1] :http://stackoverflow.com/questions/10287650/send-a-backgroundworker-to-sleep-while-checking-for-cancellation –

回答

0

您可以使用EventWaitHandle爲同步線程。

EventWaitHandle flag = new EventWaitHandle(false, EventResetMode.AutoReset); 
if (stop) 
{ 
    flag.WaitOne(5000); 
}