我正在用 C# 构建一个自定义控制台界面 (Windows)。它只是将控制台的标准输入、输出和错误重定向到 WPF 应用程序中的文本框。在后台工作人员中,“cmd.exe”正在运行,每当它输出任何内容时,该输出都会进入文本框。
代码的一部分是这样的
private void SetBackgroundWorker()
{
_worker = new BackgroundWorker { WorkerReportsProgress = true, WorkerSupportsCancellation = true };
_worker.DoWork += (sender, args) => ReadOutput(_worker);
_worker.ProgressChanged += (sender, args) => _window.UpdateConsole(args);
}
private void ReadOutput(BackgroundWorker worker)
{
int count;
var buffer = new char[1024];
do
{
var builder = new StringBuilder();
count = _process.Read(buffer, 0, 1024);
builder.Append(buffer, 0, count);
worker.ReportProgress(0, builder.ToString());
} while (count > 0);
}
然后,我可以在这个界面中执行“git add”、“git status”或“git commit”命令(我在 PATH 中添加了 git bin 目录的路径),但是当我尝试“git push origin master”时,文本框没有更新。我希望“'...'的用户名”和“'...'的密码”,但它永远不会发生。
当我在命令提示符下执行“git push ...”时,它会显示它们,但在我的 wpf 界面中,“cmd.exe”似乎根本没有重定向输出,我在这里迷路了
我认为我可以尝试的一件事是放弃重定向,并使用 Windows api 来挂钩 cmd.exe,但它会更复杂。
如果您能给我建议,我将不胜感激。
如果您想查看完整代码并对其进行测试,代码位于https://github.com/andrewchaa/ConsolePlus。它处于一个非常原始的阶段。