【问题标题】:how correctly to end all process of program如何正确结束程序的所有进程
【发布时间】:2013-09-24 15:54:49
【问题描述】:

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

代码:

    private void FormMainForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        //canceling closing form
        e.Cancel = true;
        //hide form 
        this.WindowState = FormWindowState.Minimized;
    }

    private void toolStripMenuItem1_Click(object sender, EventArgs e)
    {
        //hide icon from tray
        notifyIcon.Visible = false;
        //get current process
        Process proc = Process.GetCurrentProcess();
        //kill it and close programm
        proc.Kill();
    }

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

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

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

【问题讨论】:

  • 从任务管理器中杀掉也是一样的。方法对吗?
  • 你在使用前台线程吗?如果不使用Application.Exit()
  • 另一种选择:Environment.Exit(0);.
  • Application.Exit() - 尝试一下 - 只关闭所有可见窗口,但进程仍在运行
  • 您的程序是否创建任何后台线程?如果是这样,您需要通知他们您正在关闭,以便他们可以正常退出。

标签: c# winforms process kill


【解决方案1】:

您可以在您的菜单项单击中调用.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();
}

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2011-07-14
    • 2018-03-10
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多