/// <summary> /// Pumps messages for a fixed number of MS /// </summary> /// <param name="numMilliseconds"> /// Number of milliseconds to wait. /// </param> public static void DoEvents(int numMilliseconds) { Stopwatch sw = new Stopwatch(); sw.Start(); while (sw.ElapsedMilliseconds < numMilliseconds) { Waiter.DoEvents(); ComponentDispatcher.RaiseIdle(); System.Threading.Thread.Sleep(0); } sw.Stop(); }
/// <summary> /// Processes all UI messages currently in the message queue. /// </summary> public static void DoEvents() { // Create new nested message pump. DispatcherFrame nestedFrame = new DispatcherFrame(); // Dispatch a callback to the current message queue, when getting called, // this callback will end the nested message loop. // note that the priority of this callback should be lower than the that of UI event messages. DispatcherOperation exitOperation = Dispatcher.CurrentDispatcher.BeginInvoke( DispatcherPriority.Background, exitFrameCallback, nestedFrame); // pump the nested message loop, the nested message loop will immediately // process the messages left inside the message queue. Dispatcher.PushFrame(nestedFrame); // If the "exitFrame" callback doesn't get finished, Abort it. if (exitOperation.Status != DispatcherOperationStatus.Completed) { exitOperation.Abort(); } ComponentDispatcher.RaiseIdle(); }