簡體   English   中英

c#BackgroundWorker暫停

[英]c# BackgroundWorker pause

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

我的問題是我的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);
        }
    }

您可以將EventWaitHandle用於同步線程。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM