我需要在不同的线程中创建一个Form并保持其运行,直到用户在主线程中执行某些操作(单击按钮)。
使用
并不是很困难System.Windows.Forms.Application.Run(new ApplicationContext());
在当前线程中启动应用程序消息循环。 但是这个解决方案需要使用System.Windows.Forms命名空间,而不是wpf命名空间。
你知道实现这一目标的方式吗? =)
P.S。在没有启动应用程序消息循环的情况下,线程将在处理完最后一个表达式后立即终止。因此,表格只会出现一段时间,并将被关闭。 =(
答案 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 { }));
}
}
}