C# 在第一个命令结束后向cmd发送第二个命令

C# 在第一个命令结束后向cmd发送第二个命令,c#,cmd,C#,Cmd,在此处输入代码我想在我发送的第一个命令结束后向cmd发送命令。当我试图通过BeginErrorReadLine调用另一个命令时,出现了一个错误:流上已经启动了异步操作 如何再次连接进程并发送另一个命令?我想按另一个按钮发送第二个命令 带有cmd进程的第一个命令: ProcessStartInfo cmdStartInfo = new ProcessStartInfo(); cmdStartInfo.FileName = "python.exe"; cmdStartInfo.Arguments =

在此处输入代码我想在我发送的第一个命令结束后向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;
}
IIRC进程有一个已退出的事件来实现此目的。在您的情况下,它将是:

// non-blocking
_cmd.Exited += (sender, eventArgs) => { /* run after process exists */ };
或者,如果阻塞是可以的,您可以这样做:

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

顺便说一句,System.Net可以发送ICMP ping…这太难看了。在您的情况下,不需要.NET,您可以通过一个简单的批处理脚本实现所有功能。@Robert the ping只是一个例子。实际上,我正在使用一个python脚本ant,我想在第一个脚本的末尾向这个脚本发送一个命令。您有解决方案吗?如何使用“新建”按钮执行此操作?但我不知道在该处理程序中编写什么。如何在脚本完成后再次引用脚本并运行新命令。我不想关闭进程,只是想再次连接它。谢谢你是说像这样的?我需要通过单击按钮2调用第二个命令。然而,我的过程是异步的。如何通过单击按钮并发送另一个命令来再次引用此过程?