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

时间:2013-09-24 15:54:49

标签: c# winforms process kill

我的程序有事件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()这是关闭程序的正确方法,还是另一种方法呢?

1 个答案:

答案 0 :(得分:5)

你可以在你的menuitem点击中调用.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();
}