I already used `BackgroundWorker` and `Task` to do something in the background and after it posting it back to the UI. I even used `BackgroundWorker` and `ReportProgress` with an endless-loop (beside cancellation) to continuously post things to the UI thread.

But this time I need a more controllable scenario:
The background thread continuously polls other systems. With `Invoke` it can send updates the the UI. But how can the UI send message to the background thread? Like changed settings.

In fact I am asking for the best .NET practice to have a worker thread with these specifics:

* Runs in background, does not block UI
* Can send updates to UI (`Invoke`, `Dispatch`)
* Runs in endless loop but can be paused, resumed and stopped in a proper way
* UI thread can send updated settings to the background thread

In my scenario I still use WinForms but I guess it should not matter? I will convert the application to WPF later.

Which best practice do you suggest?