Ok, that makes sense.. In my real application I'm not using any timers, the popup is displayed in response to an event. I used the timer to simulate an event occurring to demonstrate the problem. So while switching to a System.Windows.Forms.Timer may solve my sample problem, it won't solve my actual implementation which doesn't use any timers...
My application is component based using Unity at the core, I have a PopupWindowService which registers to the events of several singleton object in the Unity container. This "PopupWindowService" is a class library, not my main UI, its goal is to handle the popup notifications displayed to the user and to pass along to the corresponding services any events which are generated by the user clicking on the popup's UI.
Most my eventing is generated by an underlying socket which is running on a different thread. The UI thread really isn't present in this component. I had looked at using WPF as a solution as I could use the Dispatcher to handle the pump problem. I would rather make this work in a 2.0 solution because all the other code is 2.0 based.
Any other suggestions?