2013-10-14 3 views
0

POST 메서드를 사용하여 서버와 통신하고 API 요청을 통해 데이터를 가져 오는 작은 C# 응용 프로그램이 있습니다. 그것은 아파치 서버입니다.C# BackgroundWorker 일시 중지

제 문제는 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

확장 'Thread.Sleep (5000)'이 (가) 작동하지 않습니다. –

+1

'Thread.Sleep'가 작동하지 않습니까? 어떻게 그 결정을 내리고 있습니까? 당신은 읽어야 –

+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); 
}