Maybe I'm missing something but I don't really see the value in doing the save from a background thread here.  All DTE objects are STA COM objects so method calls which are invoked from a background thread will be automatically marshalled to the owning apartment (in this case the UI thread).  Unless I'm missing something this code is moving to the background thread only to talk to DTE objects which will immediately move control back to the UI thread.  If that's the case best to just do all the work on the UI thread in the first place.