C# 如何正确结束程序的所有过程

C# 如何正确结束程序的所有过程,c#,winforms,process,kill,C#,Winforms,Process,Kill,我的程序在关闭时有事件只需隐藏它。但我还需要实现关闭程序-尝试使用任务栏通知项的上下文菜单 代码: 但也读了一点,即kill()终止所有工作并“终止”进程,认为这可能不是关闭程序的正常方式-一些数据可能被破坏或不存储 还可以尝试使用proc.closeMainWindow()和proc.Close()-但对程序没有影响-所有窗口都已关闭,但进程仍在运行 问题:.kill()这是关闭程序的正确方法,还是有其他方法呢?您可以在菜单项中调用.close(),单击并设置一个布尔标志,以便OnClose处

我的程序在关闭时有事件
只需隐藏它。但我还需要实现关闭程序-尝试使用任务栏通知项的上下文菜单

代码:

但也读了一点,即
kill()
终止所有工作并“终止”进程,认为这可能不是关闭程序的正常方式-一些数据可能被破坏或不存储

还可以尝试使用
proc.closeMainWindow()
proc.Close()
-但对程序没有影响-所有窗口都已关闭,但进程仍在运行


问题:
.kill()
这是关闭程序的正确方法,还是有其他方法呢?

您可以在菜单项中调用
.close()
,单击并设置一个布尔标志,以便OnClose处理程序可以检查该标志并知道它应该真正关闭。这比试图终止自己的进程要安全得多

private bool onlyHideOnClose = true;

private void FormMainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if(this.onlyHideOnClose)
    {
        e.Cancel = true;
        this.WindowState = FormWindowState.Minimized;
    }
}

private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
    this.onlyHideOnClose = false;
    this.Close();
}

您可以在菜单项中调用
.Close()
,单击并设置一个布尔标志,以便OnClose处理程序可以检查该标志并知道它应该真正关闭。这比试图终止自己的进程要安全得多

private bool onlyHideOnClose = true;

private void FormMainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if(this.onlyHideOnClose)
    {
        e.Cancel = true;
        this.WindowState = FormWindowState.Minimized;
    }
}

private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
    this.onlyHideOnClose = false;
    this.Close();
}

如果您从任务管理器中杀死它也是一样的。这是正确的方法吗?您使用的是前台线程吗?如果不使用
Application.Exit()
另一个选项:
Environment.Exit(0)
Application.Exit()
-试试看-只关闭所有可见窗口,但进程仍在运行您的程序是否创建了任何后台线程?如果是这样的话,您需要通知他们您正在关闭,这样他们就可以优雅地退出。如果您从任务管理器中杀死它,也是一样的。这是正确的方法吗?您使用的是前台线程吗?如果不使用
Application.Exit()
另一个选项:
Environment.Exit(0)
Application.Exit()
-试试看-只关闭所有可见窗口,但进程仍在运行您的程序是否创建了任何后台线程?如果是这样,您需要通知他们您正在关机,以便他们可以正常退出。