I'm unclear as to the differences between multithreading and application and using a background worker. Could someone please explain when one should be used over the other and what their differences are?