Tôi đang sinh ra một tiến trình con chạy trong cửa sổ điều khiển có thể nhìn thấy (đó là một tệp lô chạy MSBuild) và tôi muốn có đầu ra được tạo bởi quá trình hiển thị trong cửa sổ bảng điều khiển hiển thị, cũng như nắm bắt đầu ra đó để tôi có thể xử lý nó trong mã. Tôi đã đọc một số câu hỏi khác và các tài liệu MSDN đối phó với ProcessStartInfo.RedirectStandardOutput và như thế, và tôi có thể nắm bắt đầu ra từ dòng chuyển và xử lý nó trong mã tốt:Ghi lại đầu ra tiêu chuẩn và vẫn hiển thị nó trong cửa sổ giao diện
Process msBuild = new Process();
msBuild.StartInfo.FileName = "Build.bat";
msBuild.StartInfo.UseShellExecute = false;
msBuild.StartInfo.RedirectStandardOutput = true;
msBuild.Start();
string output = msBuild.StandardOutput.ReadToEnd();
msBuild.WaitForExit();
Vấn đề là các đầu ra không được hiển thị trong cửa sổ giao diện điều khiển của tiến trình con; Tôi chỉ nhận được một cửa sổ giao diện điều khiển trống trên màn hình trong khi quá trình đang chạy, biến mất khi nó kết thúc.
Tôi cho rằng tôi có thể ẩn cửa sổ tiến trình con thực tế và hiển thị cửa sổ thứ hai mà tôi chỉ viết đầu ra vào khi nó được chụp, nhưng điều đó có vẻ như nhiều công việc hơn là cần thiết. Có cách nào để có đầu ra hiển thị trong cửa sổ giao diện điều khiển và vẫn nắm bắt nó để xử lý khi nó được thực hiện?
Wow - Tôi đã không nhìn thấy OutputDataReceived trước. Khéo léo! –
Điều đó dường như trả lời câu hỏi có hay không tôi có thể có đầu ra được hiển thị trong cửa sổ giao diện điều khiển thuộc sở hữu của quá trình con và chuyển hướng đến quá trình cha mẹ cùng một lúc. Câu hỏi tiếp theo của tôi là, có thể không chuyển hướng đầu ra và chỉ chụp tất cả từ bảng điều khiển khi quá trình thoát không? Hoặc, nếu không, cách tốt nhất để tạo cửa sổ bảng điều khiển theo cách thủ công để tôi có thể viết đầu ra được chuyển hướng đến nó như là quá trình thực hiện (bằng cách sử dụng 'OutputDataReceived')? – mjl5007
Hãy xem http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx. Nó có một ví dụ (bạn có thể muốn tắt tất cả các ngôn ngữ nhưng C#) –