0

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

4

1 回答 1

5

您可以只调用.Close()menuitem click 并设置一个布尔标志,以便 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();
}
于 2013-09-24T15:58:20.970 回答