This case comes up (a lot) for me when changing "context"; which requires, say, running queries and updating views. All kinds of events start firing when they shouldn't; e.g. "SelectionChanged" (usually to a "null" item). In this case, I use a "context-wide" "IsInitializing" flag. Anyone can set it; if it's off. Once it's on, it can only be turned off. While it's on, no one can enter those methods that say "IsInitializing" is on (except the "initializer"). It works well for this "event driven" case. Of course, no "thread" can be turning off when it never turned on in the first place.