我不能在我的代码中使用“kill”进程。 (用红色下划线)

时间:2016-01-16 12:12:42

标签: c#

我想按一个按钮,当按钮被激活时,关闭我想要的应用程序。例如,如果我打开记事本,我想按一个按钮并关闭记事本。但由于某些原因,我无法使用killclose命令,因为它用红色表示它。我正在用C#构建这个应用程序。这是代码。

public EventHandler<SpeechRecognizedEventArgs> sRecognized { get; set; }
    public Form1()
    {
        InitializeComponent();
    }        
    void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {
        if (e.Result.Text == "alice present")
        {
            SoundPlayer sndPlayer = new SoundPlayer(Ai.Properties.Resources.My_name_is_A_L_I_C_E);
            sndPlayer.Play();
        }

        if (e.Result.Text == "open notepad")
        {
            Process notepad = Process.Start("notepad.exe");
        }

        if (e.Result.Text == "close notepad")
        {
            BtnN.PerformClick();
        }
    }
     private void BtnN_Click(object sender, EventArgs e)
    {
        Process notepad = Process.Kill("notepad.exe");
    }

2 个答案:

答案 0 :(得分:0)

让它变得非常简单。创建一个Process字段并在任何地方使用它:

private Process pNotepad;   //Process field

void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    if (e.Result.Text == "alice present")
    {
        SoundPlayer sndPlayer = new SoundPlayer(Ai.Properties.Resources.My_name_is_A_L_I_C_E);
        sndPlayer.Play();
    }

    if (e.Result.Text == "open notepad")
    {
        //starting Process "notepad"
        pNotepad = new Process();
        pNotepad.StartInfo.FileName = "notepad.exe";
        pNotepad.Start();
    }

    if (e.Result.Text == "close notepad")
    {
        BtnN.PerformClick();
    }
}

private void BtnN_Click(object sender, EventArgs e)
{
    //kill process if it is running
    if(pNotepad != null && pNotepad.HasExited == false)
        pNotepad.Kill();
}

答案 1 :(得分:-1)

正如评论中提到的那样,Process.Kill是实例方法,而不是静态方法,因此您需要拥有Process类的实例才能调用Kill方法。
您还应该考虑进程名称不是进程的唯一标识符,因为可以有多个具有相同名称的进程。
之后,如果您想要基于名称的所有进程,可以使用以下代码。

 public static void KillProcess(string processName)
 {
   var process = Process.GetProcessesByName(processName);

   foreach (var proc in process)
     proc.Kill();
 }

当您自己创建新流程时,可以将该流程ID存储在静态变量

 ...
public static int OpenedProcessId;
...
Process notepad = Process.Start("notepad.exe");
OpenedProcessId = process.Id;
...

(这是唯一标识符)并使用它来使用以下代码终止该特定进程。

public static bool KillProcess(int processId)
{
  try
  {
    var process = Process.GetProcessById(processId);
    process.Kill();
    return true;
  }
  catch (Exception ex) { return false; }
}