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”对象引用旁边写着这句话,没有设置为对象的实例。不应该有任何异常,我忘了一行。再试一次。复制我发布的完整代码片段。非常感谢!真的