我正在尝试使用StandardInput和StandardOutput在控制台应用程序周围包装一个包装。我陷入了控制台应用程序提示输入密码之类的地方。

我想从StandardOutput中读取内容,使用读取的文本提示用户,然后使用其StandardInput将用户的输入写回到控制台应用程序。似乎很容易,这就是我目前所拥有的:

Process process = new Process()
{
    StartInfo =
    {
        FileName = "bin\\vpnc.exe",
        Arguments = "--no-detach --debug 0",
        CreateNoWindow = true,
        UseShellExecute = false,
        RedirectStandardInput = true,
        RedirectStandardOutput = true,
    }
};

process.OutputDataReceived += (s, args) =>
{
    textBlock1.Dispatcher.Invoke(new Action(() =>
    {
        textBlock1.Text += args.Data;
    }));
};
process.Start();
process.BeginOutputReadLine();


问题是BeginOutputReadLine()只是在做...等待行结束。在这种情况下,它只是坐着坐着,坐着坐着是因为没有行要读...控制台应用程序已写出没有行尾的文本,并且正在等待输入。巧合的是,当我手动终止进程时,事件触发并得到文本。

有没有办法告诉该进程正在等待StandardInput?还是我错过了一种完全显而易见的方法来实现目标?

最佳答案

除非您需要异步的东西,否则您可能需要ReadToEnd

这是所有StreamReader Methods的列表

关于c# - 控制台应用程序提示输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1683589/

10-10 23:07