If you are using .NET 4.5, the simplest option is to use BindingOperations.EnableCollectionSynchronization. This allows you to update a collection on a background thread directly, without worrying about synchronization in the binding.
Otherwise, you need to make sure that all changes to your collection happen on the user interface thread. Using Dispatcher.Invoke
should work (provided you get the correct Dispatcher
instance), though there are more elegant solutions, such as the binding collections in The Helper Trinity and other projects.