【问题标题】:Application not closing fully, No idea why应用程序未完全关闭,不知道为什么
【发布时间】: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


【解决方案1】:

尝试使用Environment.Exit();,而不是this.Close();

【讨论】:

  • 您好,Enviroment.Exit(0) 运行良好,但任务栏中仍保留通知图标图片。知道如何解决吗?
  • 鼠标悬停在图标上后它是否仍然存在,还是消失了?如果是后者,这是 Windows 本身的已知错误,解决方法是在调用 Environment.Exit() 之前从代码中显式隐藏通知图标
  • 它消失了,是的,这是我的计划。感谢您的帮助!
【解决方案2】:

将此代码放在 Program Main 中。

if (!File.Exists("FilePath"))
        {
            return;
        }

在您的表单加载中指定以下内容:

this.WindowState = FormWindowState.Minimized;

【讨论】:

    猜你喜欢
    • 2022-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多