发送命令以停止C#中的其他进程

时间:2014-06-03 09:13:41

标签: c# wpf process

在我的WPF应用程序中,我启动了运行批处理文件的新进程。

代码如下

public void startProcess(string batchFileName)
{
     Process proc = new Process();

     //command to execute
     proc.StartInfo.FileName = batchFileName;

     proc.StartInfo.UseShellExecute = false;
     // set up output redirection
     proc.StartInfo.RedirectStandardOutput = true;
     proc.StartInfo.RedirectStandardError = true;
     proc.EnableRaisingEvents = true;
     proc.StartInfo.CreateNoWindow = true;

     // see below handler
     proc.ErrorDataReceived += proc_DataReceived;
     proc.OutputDataReceived += proc_DataReceived;

     //start a process
     proc.Start();

     proc.BeginErrorReadLine();
     proc.BeginOutputReadLine();    

     waitThread = new Thread(new ThreadStart(WaitForProcess));
     waitThread.Start();     
}

 void proc_DataReceived(object sender, DataReceivedEventArgs e)
{
    // output will be in string e.Data            
    if (e.Data != null)
    {
        logsTextBox.Dispatcher.BeginInvoke(new SetLogText(UpdateText), DispatcherPriority.Normal, e.Data);
    }
}

private void WaitForProcess()
{
    proc.WaitForExit();
    proc.Close();
}

现在我想在两者之间停止这个新创建的过程。如何实现?

任何建议/指示。

1 个答案:

答案 0 :(得分:2)

如何停止正在运行的流程

关闭方法可用于停止进程

proc.Close();

CloseMainWindow可用于请求停止

proc.CloseMainWindow();

杀戮可以用来摧毁这个过程

proc.Kill();

<强>说明

Kill强制终止进程,而CloseMainWindow仅请求终止。当正在执行具有图形界面的进程时,其消息循环处于等待状态。每次操作系统将Windows消息发送到进程时,都会执行消息循环。调用CloseMainWindow发送一个请求以关闭主窗口,该窗口在格式良好的应用程序中关闭子窗口并撤消应用程序的所有正在运行的消息循环。通过调用CloseMainWindow退出进程的请求不会强制应用程序退出。应用程序可以在退出前请求用户验证,也可以拒绝退出。要强制退出应用程序,请使用Kill方法。 CloseMainWindow的行为与使用系统菜单关闭应用程序主窗口的用户的行为相同。因此,通过关闭主窗口退出进程的请求不会强制应用程序立即退出。

此处有更多信息

http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.process.close http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.process.closemainwindow http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.process.kill