wpf方法启动应用程序消息循环

时间:2010-02-09 08:12:01

标签: c# .net wpf multithreading

我需要在不同的线程中创建一个Form并保持其运行,直到用户在主线程中执行某些操作(单击按钮)。

使用

并不是很困难
System.Windows.Forms.Application.Run(new ApplicationContext());

在当前线程中启动应用程序消息循环。 但是这个解决方案需要使用System.Windows.Forms命名空间,而不是wpf命名空间。

你知道实现这一目标的方式吗? =)

P.S。在没有启动应用程序消息循环的情况下,线程将在处理完最后一个表达式后立即终止。因此,表格只会出现一段时间,并将被关闭。 =(

3 个答案:

答案 0 :(得分:4)

使用System.Windows.Threading.Dispatcher.Run()

答案 1 :(得分:4)

而且,还有Dispatcher.PushFrame

这很方便,因为它允许您运行messageloop,直到您定义了一个停止标准,例如在屏幕上显示进度对话框时。

答案 2 :(得分:-1)

这有帮助吗?

Application.DoEvents in WPF Revisited

博客中的代码摘录:

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 { }));
        }
    }
}