运行命令并等待c#中的完成

时间:2011-02-01 19:03:49

标签: c#

我需要在我的c#程序中执行此操作。

           Process process = LaunchCommandWindow("Special args and environment set")
           process.StandardInput.WriteLine("cmd1");
           process.StandardInput.WriteLine("cmd2");

           //Parse logs
            using (Streamreader sr =  new ())
           { etc etc..}

我的命令正确执行,但问题是Parse日志代码不等待cmd1和cmd2执行完成。我不能打电话给退出和处理。 waitforexit因为,在解析日志之后,我有更多的命令要执行。

以下是如何设置流程启动信息。 LaunchCommandWindow()

         ProcessStartInfo startInfo = new ProcessStartInfo();

        startInfo.FileName = Path.Combine(Environment.SystemDirectory, "cmd.exe");
        startInfo.Arguments = "/K " + newEnvironmentArgs;

        startInfo.UseShellExecute = false; 
        startInfo.RedirectStandardInput = true;
        Process process = new Process();
        process.StartInfo = startInfo;
        process.Start();

        return process;

如何获取解析日志代码以等待cmd2完成?

感谢。

3 个答案:

答案 0 :(得分:3)

如果“cmd2”将完成写入标准输出流,您可以侦听标准输出,直到看到该事件,然后从那里进行处理。

答案 1 :(得分:1)

创建一个新线程来运行任务。

使用BackgroundWorker

当它完成时,它会引发一个事件(在你的主线程中),你可以从中继续运行。

这将阻止您的程序挂起,如果还有其他工作要做,它可以允许您在另一个线程运行时执行此操作。

Here's a tutorial

- - - - - - - - 编辑

经过进一步研究,以下是对其余部分的思考: 如果要读取输出,则必须将RedirectStandardOutput设置为true。

如果您没有拥有在同一窗口中运行这两个命令,则可以调用 process.WaitForExit(int) 其中int是等待的毫秒数,然后启动一个新进程(或带有新参数的process)来触发cmd2。

答案 2 :(得分:0)

我认为 Process.WaitForExit()方法正是您所需要的。还有 Process.HasExited 属性 并且用于启动使用“cmd / C cmd1& cmd2”

之类的东西