阻止应用程序关闭
Posted
技术标签:
【中文标题】阻止应用程序关闭【英文标题】:Prevent application from closing 【发布时间】:2014-09-30 18:14:58 【问题描述】:我在 Visual Studio 中创建了一个空项目并添加了所需的程序集引用、一个具有静态 Main 函数的类和一个 WPF 窗口。
然后我创建一个 Window 实例并显示它,但在执行后一切都关闭了,因为没有任何东西可以保持线程打开/运行。
添加while(true)
循环使其保持打开状态,但冻结主线程。
将while(true)
循环添加到新线程使该线程保持打开状态,但主线程仍完成执行并关闭其他所有线程。
如何让应用程序保持打开状态?
【问题讨论】:
【参考方案1】:简单的答案是只使用股票 WPF 应用程序项目,而不是滚动您自己的项目,因为它生成的代码会为您处理。
更长的答案是明确使用Application.Run
。你可以在这个答案中看到框架做了什么:https://***.com/a/2694710/1783619
这会保持一个长时间运行的线程,这样您的应用程序就不会如您所见那样提前终止。
【讨论】:
我在表单应用程序中看到了 Application.Run,但该函数只接受 Windows 表单,我想用 WPF Window 尝试一下。 @Anomaly WPF 版本将使用 WPFApplication
对象(请参阅标准 App.xaml.cs)。它是相同的函数调用,如链接的 SO 帖子中所示。【参考方案2】:
创建一个新的 WPF 应用程序/项目:
在 Visual Studio 中执行:文件 -> 新建 -> 项目 -> Visual C# -> WPF 应用程序
【讨论】:
我正在尝试从一个空项目创建 Windowed 应用程序,我知道我可以通过选择适当的项目来创建 WPF 或 Forms 应用程序。 ... 或者至少这样做,以便您可以看到自动生成的代码的作用 使用 WPF 我看不到任何自动生成的代码,只有 WinForms 但它使用Application.Run(new Form())
只接受表单
@Anomaly 在这种情况下,直到构建时才会生成自动生成的代码,因此更难找到。它仍然在那里,但仍然做同样的事情:)
这里我为你提供了 WPF 应用程序自动生成的 main 方法的代码:public static void Main() MyApp.UI.App app = new MyApp.UI.App(); app.InitializeComponent(); app.Run();
你可以在你的项目文件夹 -> obj -> Debug 中找到自动生成的代码以上是关于阻止应用程序关闭的主要内容,如果未能解决你的问题,请参考以下文章
如何正确使用 IRegisteredObject 阻止应用程序域关闭/回收 Web 应用程序?