You only need one thread. This thread would save a record and then report progress back to the form which would update the progress bar.
In fact, I think you can make it easier on yourself by creating a
object instead of a thread because it already has the ability to a) send progress events, and b) can be easily canceled.
Here's a link that describes how to update the UI from a thread (including
The difference in processing time you're seeings is because the thread doesn't have to update the UI when the window is minimized.
If you're having performance issues, you're going to have to just muscle through it and use the tools on hand to find/mitigate the choke points. Try using Trace statements and just let the program run. The trace statements will send text to the output window in Visual Studio, and you can observe what's happening and when. This will slow down your process even more, but at least you'll be able to watch what's happening.