CTreeView Updating

I ran into sort of a dilemma with updating a tree view. I have a CTreeView that I update on a periodic interval. If a user changes the state of a node (expands or contracts it), the refresh ‘undoes’ what the user just changed. I then resorted to storing the state of the node changes so the refresh would get the latest state data to refresh. Here again we run into async problems if the refresh cycle occurs during a manual node change causing the change to revert back. I just wanted to hear from some of the gurus, what is the best way to approach this problem in order to get a stable tree control.