我正在尝试使用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/