1

所以由于某种原因,当我this.Close();在我的程序中编码时,它实际上并不会关闭它。我让程序打开一个不同的 .exe 文件然后关闭,但我打开我的任务管理器,它实际上仍在后台运行。我的上下文菜单上的“关闭”选项也有这个问题。任何想法为什么?

编辑:即使我用按钮退出,它仍然在后台。

编辑:

private void closeToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.Close();
}

private void launch_Click(object sender, EventArgs e)
{
    System.Diagnostics.Process.Start(Environment.ExpandEnvironmentVariables("%AppData%\\program.exe"));
    this.Close();
}

只有两个实际关闭程序的代码。但它仍在后台运行。即使我通过实际的 x 按钮退出,它仍然在后台运行。

4

2 回答 2

2

您必须关闭您创建的进程。创建一个变量来保存已创建的进程,并在您关闭表单或按下另一个按钮时关闭进程。请参阅:http: //msdn.microsoft.com/en-us/library/system.diagnostics.process.close.aspx

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        private Process _process;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this._process = Process.Start("notepad.exe");
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (this._process != null) {
                this._process.CloseMainWindow();
                this._process.Close();
            }
        }
    }
}
于 2013-08-02T05:42:05.560 回答
0

正如上面评论中提到的那样,使用 System.Diagnostics 添加;到您的代码并尝试此代码

public Form1()
{
    InitializeComponent();
    Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
}

void Application_ApplicationExit(object sender, EventArgs e)
{
    Process.GetCurrentProcess().Kill();
}
于 2013-08-02T06:39:10.930 回答