【发布时间】:2023-03-21 10:22:01
【问题描述】:
我有一个这样打开的应用程序:(Program.cs)
Main MainForm = new Main();
Application.Run();
如果用户没有指定 /hide 选项,那么程序显示如下: (Main.cs)
internal Main()
{
InitializeComponent();
this.Show();
}
有时,如果文件不存在,程序需要立即关闭。所以我这样关闭它:(Main.cs)
private void MainLoad(object sender, EventArgs e)
{
if (!File.exist("FilePath")
this.Close();
}
在 FormClosed 上,我有这个:
Application.ExitThread();
这个destoy 几乎包含了应用程序中的所有内容,包括任务栏图标。但是,在 Visual Studio 上,程序仍然“运行”,直到我单击“停止调试”。 有人知道为什么会这样吗?
目标:如果用户指定 /hide 参数,我想最小化启动程序(不显示 Flash 屏幕)。 如果找不到某个文件,程序会自动关闭。
【问题讨论】:
-
希望您的用户理解为什么程序在没有通知的情况下无法启动(或停止)
-
这不是问题。当然,我会添加通知。现在,只是为了测试目的,我正在尝试解决这个问题。
-
问题是 Application.Run()。如果没有给定表单,它不会为表单的关闭事件添加事件处理程序,并且不会在表单关闭时终止消息循环。另请参阅:Application.Exit()。
-
我认为这不是 FormClosed 事件。之所以调用该事件,是因为我确实使用 this.Show() 启动了一个表单。我测试并调用了 FormClosed,即使使用 Application.ExitThread/Exit,仍然有一些东西在运行......
-
我确定 FormClosed 已提出。我的意思是,当您的表单关闭时,应用程序将不知道终止消息循环,因此必须明确完成。 Application.Exit 应该终止所有消息循环;您应该能够通过在 Application.Run 之后设置断点来验证它。您是否偶然创建了任何后台线程?
标签: c# winforms multithreading visual-studio-2010 visual-studio