Пример #1
0
        /// <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();
        }
Пример #2
0
        /// <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();
        }