The dispatcher did not clean references before returning, therefore
the second call to Dispatcher.Run() failed.
frame.dispatcher = dis;
dis.RunFrame (frame);
+
+ frame.dispatcher = null;
+ dis.current_frame = frame.ParentFrame;
+ frame.ParentFrame = null;
}
void PerformShutdown ()
Dispatcher.PushFrame(frame);
}
+
+ [Test]
+ public void TestRunTwice()
+ {
+ Dispatcher d = Dispatcher.CurrentDispatcher;
+ Action exit = delegate { Dispatcher.ExitAllFrames(); };
+
+ d.BeginInvoke(DispatcherPriority.Normal, exit);
+ Dispatcher.Run();
+ d.BeginInvoke(DispatcherPriority.Normal, exit);
+ Dispatcher.Run();
+ }
}
}