I have a TreeView control that I need to populate with a large 3 tiered list of objects which is taking an incredible amount of time to build up. I'm doing the loading of the data on the background thread then sending the GUI updates over to the GUI thread, but there are just too many updates, for every time I add a node I have to send that across, then I have to call the ExpandSubTree() method to then expand all the sub nodes, which then fires off more expand events, and it crashes.

Is there a way I can build up the control and it's open/closed state somehow on a background thread and then only marshall it over once it's complete?