首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何停止WPF应用程序以非交互方式运行?

如何停止WPF应用程序以非交互方式运行?
EN

Stack Overflow用户
提问于 2013-03-21 23:26:25
回答 1查看 540关注 0票数 0

在开发WPF应用程序时,我曾尝试以非交互方式停止该应用程序的执行。此应用程序用于用户将作业提交到Windows集群的环境中,有时他们会在意外情况下提交UI代码。这些实例最终在服务器上运行,直到有人发现它们的存在并终止进程。

遵循多问题解答(#1#2#3)中的建议,我使用Environment.UserInteractive实现了以下代码,以停止非交互式使用:

代码语言:javascript
运行
复制
private void Application_Startup (object sender, StartupEventArgs e)
{
    if (Environment.UserInteractive)
    {
        var window = new MainWindow();
        window.Show();
    }
}

使用Windows7任务计划程序进行的快速测试显示,该进程仍处于活动状态!因为任务被设置为无论用户是否登录都要运行,所以我在任何地方都看不到窗口,并且不确定Environment.UserInteractive是否返回true

那么,如何检测WPF应用程序是否是非交互运行的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-21 23:26:25

显然,这个建议是正确的,Environment.UserInteractive返回了false。然而,最终发生的是WPF调度程序继续运行,而不管窗口是否存在。当您阅读Application.ShutdownMode的备注时,这一点会变得很明显

只有在调用

Shutdown方法时,Application应用程序才会停止运行。关机可以隐式发生,也可以显式发生,具体由ShutdownMode属性的值指定。

为了真正停止WPF进程的非交互运行,您必须告诉它停止运行!

代码语言:javascript
运行
复制
if (Environment.UserInteractive)
{
    var window = new MainWindow();
    window.Show();
}
else
{
    // This step is important, otherwise the application will continue running
    this.Shutdown(1);
}

一旦您添加了对Application.Shutdown的调用,该进程将在非交互运行时以一种很好的方式分解!

任务计划程序已成功完成任务"\RunTest“,实例"{0d4e6506-b12b-4181-8a75-17754ddef81c}”,操作"\networkshare\path\to\Executable.exe“,返回代码为%1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15551630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档