I have a button on an Excel sheet which starts a new thread to do some processing. If I want to make any changes to Excel (e.g. write data to a cell using Worksheet.Ra
That work doesn't 'need' to be done on the UI thread, .net will marshal the call for you, but if you make repeated calls from a background thread you may hit performance issues.
But to answer your question specifically, if you have .net 3.5, in your add-in load event add this:
Dispatcher _dispatcher = Dispatcher.CurrentDispatcher;
And then add:
public Dispatcher Dispatcher { get {return _dispatcher;} }
Then you can dispatch to the UI thread by going
Globals.ThisAddIn.Dispatcher.Invoke(()=>{/*stuff*/});
If you don't have .net 3.5, then there are a few other thread synchronisation techniques, like using SynchronizationContext.Current instead of the Dispatcher.