我正在C#中構建自定義控制檯界面(Windows)。它只是將控制檯的標準輸入,輸出和錯誤重定向到WPF應用程序中的文本框。在後臺工作器中,「cmd.exe」正在運行,並且只要輸出任何內容,該輸出就會轉到文本框。當您在Windows中運行git push命令時,控制檯的標準輸出重定向會發生什麼
代碼的一部分是本
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中添加」,「git的狀態」,或「git的承諾」這個界面內的命令(I加入與git bin中的路徑PATH中的目錄),但是當我嘗試「git push origin master」時,文本框不會更新。我期望「用戶名爲'...'」和「密碼爲'...'」,但它永遠不會發生。
當我在命令提示符下執行「混帳推......」,這顯示他們,但在我的WPF界面,「cmd.exe的」似乎沒有輸出在所有重定向,以及我在這裏失去了
我想我可以嘗試的一件事是放棄重定向,並使用Windows API來掛接cmd.exe,但它會變得更加複雜。
如果你能告訴我,我會非常感激。
如果您想查看完整的代碼並進行測試,代碼爲https://github.com/andrewchaa/ConsolePlus。它處於一個非常原始的階段。
嗯,聽起來我應該通過win api訪問Screen Buffer。謝謝,彼得。 – Andy