Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我能';不要使用“a”;“杀死”;我的代码中的进程。(其下划线为红色)_C# - Fatal编程技术网

C# 我能';不要使用“a”;“杀死”;我的代码中的进程。(其下划线为红色)

C# 我能';不要使用“a”;“杀死”;我的代码中的进程。(其下划线为红色),c#,C#,我想按下一个按钮,当按钮被激活时,关闭我想要的应用程序。例如,如果我打开记事本,我想按下一个按钮并关闭记事本。但是由于某些原因,我不能使用kill或close命令,因为它在命令下面加了红色下划线。我正在用C#构建这个应用程序。这是代码 public EventHandler<SpeechRecognizedEventArgs> sRecognized { get; set; } public Form1() { InitializeComponent(

我想按下一个按钮,当按钮被激活时,关闭我想要的应用程序。例如,如果我打开记事本,我想按下一个按钮并关闭记事本。但是由于某些原因,我不能使用
kill
close
命令,因为它在命令下面加了红色下划线。我正在用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");
    }
公共事件处理程序已识别{get;set;} 公共表格1() { 初始化组件(); } void sRecognize_SpeechRecognized(对象发送方,SpeechRecognizedEventArgs e) { 如果(e.Result.Text==“alice present”) { SoundPlayer sndPlayer=新的SoundPlayer(Ai.Properties.Resources.My_name_是_A_L_I_C_E); sndPlayer.Play(); } 如果(e.Result.Text==“打开记事本”) { 进程记事本=Process.Start(“notepad.exe”); } 如果(e.Result.Text==“关闭记事本”) { BtnN.PerformClick(); } } 私有无效BtnN_单击(对象发送方,事件参数e) { Process notepad=Process.Kill(“notepad.exe”); }
正如在注释中提到的,
Process.Kill
是实例方法,而不是静态方法,因此您需要有
Process
类的实例才能调用
Kill
方法
您还应该考虑进程名不是进程的唯一标识符,因为可以有更多的同名进程。br/> 在这之后,如果您希望基于名称来创建所有进程,那么可以使用以下代码

 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; }
}

让我们把它变得非常简单。创建一个
流程
字段,并在任何地方使用它:

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();
}

Kill
是一个实例方法,您试图静态调用它。找到你想要杀死的“notepad.exe”实例,用它创建一个进程并杀死它。另外,请努力在线格式化你的代码,使其可读。你的空白太多了。你喜欢阅读自己的帖子吗?如果这行代码可以工作,你希望“notepad.exe”的3个运行进程中的哪一个会被杀死?@tchelidze感谢你的回复。我试着将代码放入BtnN_click void,但它无法关闭记事本进程。知道为什么吗?如果我们需要一个实例,为什么不简单地记住启动流程时创建的
Process
的实例呢?为了应用程序的用户着想,千万不要建议回答这样的问题。这很危险!如果我打开了5个记事本,应用程序启动了1个记事本,你将杀死6个进程,我在5个进程中的所有工作都将丢失@汤马斯韦勒感谢托马斯的建议,我们当然可以。让我修改我的答案,使其更适合当前的问题上下文。@ThomasWeller thomas,我已经提到了您的警告,请全面阅读我的答案,而不仅仅是代码。使用以下代码后,记事本将打开,但是没有关闭。@DenVergold您有权限终止该进程吗?它在pNotepad.startinfor.filename=“notepad.exe”对象引用旁边写着这句话,没有设置为对象的实例。不应该有任何异常,我忘了一行。再试一次。复制我发布的完整代码片段。非常感谢!真的