gpt4 book ai didi

c# - 在 C# 中等待命令完成

转载 作者:可可西里 更新时间:2023-11-01 08:51:46 26 4
gpt4 key购买 nike

我是 C# 的新手,正在尝试开发一个在内部打开命令提示符并在此处执行一些命令的小型应用程序。这是我到目前为止所做的:

    m_command = new Process();
m_command.StartInfo.FileName = @"cmd.exe";
m_command.StartInfo.UseShellExecute = false;
m_command.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
m_command.StartInfo.CreateNoWindow = true;
m_command.StartInfo.RedirectStandardInput = true;
m_command.StartInfo.RedirectStandardOutput = true;

m_command.Start();

m_reader = m_command.StandardOutput;
m_writer = m_command.StandardInput;

m_writer.WriteLine("Somecommand"); //execute some command

如您所见,我已经重定向了输入和输出。我的问题是如何同步执行“某些命令”,即我想使用重定向输出读取我的命令的结果。为此,我必须等到我使用 WriteLine 调用的命令完成。我该怎么做?

最佳答案

这实际上取决于命令将执行的操作。您可以使用 Process.WaitForExit 等待进程退出,同时在另一个线程中或使用 OutputDataReceivedm_reader 读取数据。但是,只有当命令完成时进程将退出时,这才会起作用。 (请注意,您必须读取输出,否则它可能会填满输出缓冲区并基本上阻止进程。)

另一种选择是当命令完成时你会得到一定的输出——比如下一个命令提示符。麻烦的是,如果你的命令恰好输出相同的东西,你就会弄错。

不过,感觉像这样启动命令提示符并不是一个好方法。您有什么理由不每次都创建一个单独的流程?

另一种选择:如果您可以通过命令行确定刚刚启动的进程,您可以将其作为进程找到并等待那个退出。虽然这很棘手 - 我真的会尝试重新设计您的解决方案。

关于c# - 在 C# 中等待命令完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com