A background worker is good - but it's name suggests something that isn't true: it doesn't run at a lower priority than normal threads, it is a normal thread that will be automatically closed automatically when all foreground threads have exited (so your app doesn't have to worry about cleaning up threads behind it).
If you want to run a CPU intensive operation in the background, you would probably be better off using a regular Thread object, and setting the priority on that yourself:
Thread.Priority Property (System.Threading)[
^].
That will make you responsible for closing the thread if your app needs to exit, but that's probably a good idea anyway to ensure that you "know" that each operation is complete before your thread is automatically killed.