我在C#中发布了一个应用程序 . 这里的问题是每当我通过单击红色退出按钮关闭主窗体时,它会关闭窗体,但它不会关闭应用程序 . 当我尝试关闭计算机时,我发现了这一点,希望我制作的应用程序运行顺畅,然后我被很多子窗口轰炸,我已经将MessageBox Alerts放入其中 .
我尝试了Application.Exit,但它仍然调用所有子窗口和警报,我不知道如何使用Environment.Exit和哪个整数放入其中 . 顺便说一下,每当我的表单调用formclosed或form closing事件时,我都会使用 this.Hide()
函数关闭应用程序 . 这会影响我的应用程序现在的行为吗?
8 回答
来自MSDN:
Application.Exit
Environment.Exit
这篇文章Application.Exit vs. Environment.Exit指出了一个很好的提示:
您可以通过检查
System.Windows.Forms.Application.MessageLoop
属性来确定是否已调用System.Windows.Forms.Application.Run
. 如果为true,则调用Run,您可以假设WinForms应用程序正在执行如下 .参考:Why would Application.Exit fail to work?
我知道这不是你遇到的问题,但是这可能发生的另一个原因是你的应用程序中有一个非后台线程 .
当
IsBackground
是false
时,它将保持程序打开直到线程完成,如果将IsBackground
设置为true
,则线程将不会保持程序打开 . 像BackgroundWoker
,ThreadPool
和Task
这样的内部都在内部使用IsBackground
设置为true
的线程 .所有你需要的是
System.Environment.Exit(1);
它使用系统名称空间“使用系统”,当你启动项目时,它几乎总是存在 .
简而言之,是的 . 当主窗体(通过
Main
方法中的Application.Run
启动的窗体)关闭(未隐藏)时,整个应用程序将结束 .如果您的整个应用程序应该在主窗体关闭时始终完全终止,那么您应该只删除该窗体关闭的处理程序 . 通过不取消该事件并在用户关闭它时让它们形成关闭,您将获得所需的行为 . 对于所有其他表单,如果您不打算再次显示该表单的相同实例,只需让它们关闭,而不是阻止关闭并隐藏它们 . 如果你再次展示它们,那么隐藏它们可能没问题 .
如果您希望能够让用户单击主表单的"x",但是另一个表单保持打开状态,并且实际上成为"new"主表单,那么's a bit more complicated. In such a case you will need to just hide your main form rather than closing it, but you'll需要添加某种实际的机制当你真的希望你的应用程序结束时关闭主窗体 . 如果出现这种情况,您需要在问题中添加更多详细信息,以描述应该和不应该实际结束程序的应用程序类型 .
你做的:
在你的主()?
我发现在表单关闭时很容易杀死应用程序 .
我要么是下列之一:
对于winform或
用于控制台应用程序(也适用于winforms) .
谢谢!
在这种情况下,退出应用程序以覆盖App.xaml.cs中的onExit()方法的最正确方法: