In my WPF, .Net 4.5 application I have some long running tasks that occur after user interactions.
If for example a user clicks a button, whats the best way to run the button action on a separate thread so that the user can keep interacting with the application while the processing is being done?
For Long running tasks you can use async/await. It's designed to replace the background worker construct, but it's completely down to personal preference.
here's an example:
Something like this would not lock up the UI whilst the task is completing.
Use the BackgroundWorker class. You will need to move your code to the worker and call the Run function of it from the button. Here is a nice answer on StackOverflow on how to use it.
One way is to use the TPL (Task Parallel library). Here is an article on Code Project about Using TPL in WPF.