C# 如何执行需要用户交互的隐藏进程而不阻塞?

C# 如何执行需要用户交互的隐藏进程而不阻塞?,c#,.net,cmd,command,C#,.net,Cmd,Command,请不要在阅读前标记为重复。 在搜索了很多谷歌搜索之后,我发现了很多代码。所有的代码都可以,但我的问题是多一点。 假设,我可以使用下面的代码执行'dir'命令,这将为我提供完美的输出: static void Main(string[] args) { var str=ExecuteCommand("/c dir"); //var str=ExecuteCommand("/c chkdsk C: /f/r/x"); MessageBox.Show(str);

请不要在阅读前标记为重复。 在搜索了很多谷歌搜索之后,我发现了很多代码。所有的代码都可以,但我的问题是多一点。 假设,我可以使用下面的代码执行
'dir'
命令,这将为我提供完美的输出:

static void Main(string[] args)
    {
     var str=ExecuteCommand("/c dir");
     //var str=ExecuteCommand("/c chkdsk C: /f/r/x");
     MessageBox.Show(str);
    }


static string ExecuteCommand(string cmd)
        {
            Process proc = new  Process();
            proc.StartInfo.FileName = "cmd.exe";
            proc.StartInfo.Arguments = cmd;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.StartInfo.CreateNoWindow = true;
            proc.Start();
            string output = proc.StandardOutput.ReadToEnd();
            return output;
        }

但是,当我运行这个命令
“/c chkdsk c:/f/r/x”
时,没有输出,因为它等待用户输入(y/n)。我想查看输出并从C代码发送y或n,而不是通过cmd控制台窗口。

WinForms应用程序?您使用(想要使用)哪种UI元素来显示控制台输出?@elgonzo:winform或console,我只需要代码。它可以是messabebox或控制台窗口。您需要重定向标准输入订阅事件,以获取启动进程的控制台输出(即“cmd/c…”)。请注意,您需要调用流程对象(在调用Start()之前),否则事件将不会触发。关于输入,请参见上面威尔评论中的MSDN链接…@elgonzo:我也尝试了OutputDataReceived。这不能解决我的问题。它等待用户输入。我的意思和我描述的问题一样process.ErrorDataReceived+=新的DataReceivedEventHandler(OutputHandler);process.OutputDataReceived+=新的DataReceivedEventHandler(OutputHandler2);'