Метод wpf для запуска цикла сообщений приложения - PullRequest
5 голосов
/ 09 февраля 2010

Мне нужно создать форму в другом потоке и поддерживать ее в рабочем состоянии, пока пользователь не выполнит какое-либо действие в основном потоке (нажмите кнопку).

Это не очень сложно сделать с помощью

System.Windows.Forms.Application.Run(new ApplicationContext());

, который запускает цикл сообщений приложения в текущем потоке. Но это решение требует использования пространства имен System.Windows.Forms, которое не является пространством имен wpf.

Знаете ли вы wpf-способ достижения этой цели? =)

P.S. без запуска цикла сообщений приложения поток будет немедленно завершен после обработки последнего выражения в нем. Итак, Форма появится только на мгновение и будет закрыта. = (

Ответы [ 3 ]

4 голосов
/ 09 февраля 2010

А еще есть Dispatcher.PushFrame

Это удобно, поскольку позволяет запускать цикл сообщений до тех пор, пока вы не определите критерий остановки, например, пока на экране отображается диалоговое окно прогресса.

4 голосов
/ 09 февраля 2010

Использовать System.Windows.Threading.Dispatcher.Run ()

0 голосов
/ 09 февраля 2010

Помогает ли это?

Приложение. Пересмотр событий в WPF

Выписка из блога:

using System;
using System.Threading;
using System.Windows;
using System.Windows.Threading;

namespace Sheva.Windows
{
    /// <summary>
    /// Designates a Windows Presentation Foundation application with added functionalities.
    /// </summary>
    public class WpfApplication : Application
    {
        /// <summary>
        /// Processes all messages currently in the message queue.
        /// </summary>
        /// <remarks>
        /// This method can potentially cause code re-entrancy problem, so use it with great care.
        /// </remarks>
        public static void DoEvents()
        {
            Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...