Thanks for the pointers. The approach taken doesn't differ much from what I'm doing -- build the data in a thread, add the data to the series in the UI thread. And it is all imperative, by which I mean that process of building and replacing is something I have to do myself in response to an event, and isn't something that occurs through some binding mechanism.