Send a backgroundworker to sleep while checking for cancellation

后端 未结 3 815
悲&欢浪女
悲&欢浪女 2021-01-06 01:34

I have a background worker which updates the GUI on a regular basis via ReportProgress.

The update occurs at regular intervals, every 5 seconds for example, or it c

3条回答
  •  广开言路
    2021-01-06 01:57

    You're going down the wrong path.

    • A Bgw is using the ThreadPool and should therefore be used for (relatively) short actions, typically under 0.5 seconds. Keeping one around indefinitely is not recommended.
    • You should almost never use Sleep() on any thread. Certainly not for more than a few ms.
    • using Sleep(1) in a busy-wait for 5 seconds is a big waste of CPU. You are hurting your other threads. At the very least consider upping it to Sleep(100) or so. Find the max delay you will allow for your Cancel.

    As a solution: Use a Timer. You have a periodical task, use the right tool.

    Use System.Threading.Timer for ThreadPool based background work. Update the GUI through Dispatcher.Invoke().

    Use the Dispatcher.Timer to execute small (under 0.1 sec) portions of work on the Main thread. You can directly update the GUI.

提交回复
热议问题