第一个命令结束后,向cmd发送第二个命令

时间:2014-09-23 10:58:31

标签: c# cmd

在这里输入代码我希望在我发送的第一个命令结束后向cmd发送命令。当我试图通过BeginErrorReadLine()调用另一个命令时出现错误:“已经在流上启动了异步操作”。

如何重新连接流程并发送另一个命令? (我想按另一个按钮发送第二个命令)。

使用cmd进程的第一个命令:

ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
cmdStartInfo.FileName = "python.exe";
cmdStartInfo.Arguments = ConfigurationManager.AppSettings["ttk"] + commandline;
cmdStartInfo.CreateNoWindow = true;
cmdStartInfo.RedirectStandardInput = true;
cmdStartInfo.RedirectStandardOutput = true;
cmdStartInfo.RedirectStandardError = true;
cmdStartInfo.UseShellExecute = false;
cmdStartInfo.WindowStyle = ProcessWindowStyle.Hidden;

_cmd = new Process();
_cmd.StartInfo = cmdStartInfo;


if (_cmd.Start())
{
    _cmd.OutputDataReceived += new DataReceivedEventHandler(_cmd_OutputDataReceived);
    _cmd.ErrorDataReceived += new DataReceivedEventHandler(_cmd_ErrorDataReceived);
    _cmd.Exited += new EventHandler(_cmd_Exited);

    _cmd.BeginOutputReadLine();
    _cmd.BeginErrorReadLine();


}
else
{
    _cmd = null;
}

1 个答案:

答案 0 :(得分:0)

IIRC Process有一个Exited事件来实现这一目标。在你的情况下,它将是:

// non-blocking
_cmd.Exited += (sender, eventArgs) => { /* run after process exists */ };

或者,如果阻止是可以的,你就是这样:

_cmd.Start();
_cmd.WaitForExit(); // Blocking (until _cmd exists)