繁体   English   中英

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

[英]Run commands and wait for completion in 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完成?

谢谢。

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

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

使用BackgroundWorker

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

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

这是一个教程

- - -编辑 - - -

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

如果你没有运行在同一窗口中两个命令,你可以调用process.WaitForExit(int)其中int是等待的毫秒数,然后启动一个新的进程(或process与新参数)火CMD2 。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM