从控制台应用程序启动 WPF 窗口
Posted
技术标签:
【中文标题】从控制台应用程序启动 WPF 窗口【英文标题】:Launching a WPF window from a Console application 【发布时间】:2022-01-14 13:39:32 【问题描述】:我正在尝试使用 WPF 窗口作为消息弹出窗口,该窗口将在执行任务后关闭。我看到的所有文档都说这不能用 messageBox 完成,这就是我使用 WPF 的原因。我找到了一个代码片段,它允许我打开 WPF 窗口,但它不会将应用程序推进到下一个进程。下面是我发现的最后一个代码示例,我认为它显示了承诺,但窗口没有打开 -
[STAThread]
static void Main(string[] args)
try
string filePath = "my new directory";
var popup = new PopupTest();
popup.Dispatcher.BeginInvoke
(System.Windows.Threading.DispatcherPriority.Normal,
(Action)(() =>
popup.Show();
));
// Do some console application stuff
do
Directory.CreateDirectory(filePath);
while (!Directory.Exists(filePath));
popup.Close();
catch (Exception e)
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
cs.xaml 文件只是默认文件
/// Interaction logic for PopupTest.xaml
/// </summary>
public partial class PopupTest : Window
public PopupTest()
InitializeComponent();
我觉得这应该比我做的更简单。任何可以为我指明正确方向的东西都会受到赞赏。
【问题讨论】:
恕我直言,如果您想显示某种窗口,只需创建一个 WPF 应用程序。为什么要混合控制台和 ui 项目,为什么两者都需要? This may be worth 也结帐。 此功能(在操作完成之前弹出警告)正在包含在更大的现有应用程序中。我所包含的只是我在网上找到的一种方法。我查看了您包含的链接,Application app = new Application (); app.Run(new Window1());
打开了窗口,但不允许应用程序继续。我尝试将该行添加到它自己的线程`var popup = new PopupTest();应用程序 = 新应用程序();线程 thread1 = new Thread(()=> app.Run(popup)); thread1.Start(); ` 但这也不会打开窗口
【参考方案1】:
您需要引用 WPF 程序集并在 STA 线程上创建并运行 System.Windows.Application
:
[STAThread]
static void Main(string[] args)
var app = new System.Windows.Application();
app.Run(new PopupTest());
Run
方法阻塞并且在应用关闭之前不会返回。
如果您想在应用程序运行时做一些事情,您需要在另一个线程上执行此操作:
[STAThread]
static async Task Main(string[] args)
Task t = Task.Run(() =>
string filePath = "my new directory";
do
Directory.CreateDirectory(filePath);
while (!Directory.Exists(filePath));
);
var app = new System.Windows.Application();
app.Run(new MainWindow());
await t;
【讨论】:
朝着正确的方向前进,但任务完成后我无法关闭窗口。使用上面的代码作为起点,我尝试将app.MainWindow.Close();
放在app.Run
之后,但似乎这条线永远不会被击中。我尝试在任务之前实例化窗口并将app.MainWindow.Close()
放在任务中,在while 循环之后,但这似乎冻结了应用程序。
您不会等待任务直到窗口和应用程序已关闭。正如我所说,“Run
方法阻塞并且在应用程序关闭之前不会返回。”你想达到什么目的?您希望何时以及如何关闭窗口?以上是关于从控制台应用程序启动 WPF 窗口的主要内容,如果未能解决你的问题,请参考以下文章