I'm building a custom Console interface (Windows) in C#. It simply redirect Console's standard input, output, and error to a textbox in WPF application. In the background worker, "cmd.exe" is running, and whenever it outputs anything, that output goes to textbox.
A part of the code is this
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);
}
Then, I can do "git add", "git status", or "git commit" commands within this interface (I added the path to git bin directory in PATH), but when I try "git push origin master", the textbox is not updated. I would expect "Username for '...'" and "Password for '...'", but it never happens.
When I do "git push..." in command prompt, it display them, but in my wpf interface, "cmd.exe" doesn't seem to redirect the output at all, and I'm lost here
One thing I thought I could try was to give up with Redirection, and use Windows api to hook cmd.exe, but it wouild be more complicated.
If you could advise me, I would really appreciate it.
If you want to look at the full code and test it, the code is in https://github.com/andrewchaa/ConsolePlus. It's in a very primitive stage.