I have used the Dispatcher, and it does not seem to be very reliable. Had much more luck with tasks: First get a TaskScheduler from somewhere that is on the UI thread:
TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Then in the place you need to make changes use a task:
Task task = Task.Factory.StartNew(() =>
}, CancellationToken.None, TaskCreationOptions.None, uiScheduler);
Hope it helps.