You got a lot going on in your question and I'm not sure I understand all of it, but here goes.
First of all, You don't need to create an entirely different VS project to do this. In fact, I'd guess that it's more work to do that and merge them later. If I were you, I'd copy what I had now and keep it as a backup in case I messed it up but still work on changes in just one project.
Second, I can't see anywhere in your code any reference to a save dialog or to a backgroundworker. I am guessing that you are just looking for advice on how to organize it, and that really depends on how it's being used. Typically when I do this, I use the save dialog control to collect the name of the file the user wants. Then I pass it into the backgroundworker using the RunWorkerAsyc(object) method
]. You can pass an object into the background worker this way. However, you can only pass one object. So if you need multiple things passed into the backgroundworker, it's a good idea to make a custom class to kind of package it all before sending it in. Here
] is a general walk-through in how the background worker can be used, if you need more help.
I hope this helps. If not, could you explain a bit more of what you are actually looking for and what you have tried?