我有一个WinForms应用程序。在该应用程序内部我正在开始一个新进程,我希望将此特定进程(而不是整个winforms应用程序)的输出重定向到控制台。
本机方法AllocConsole()
对我来说不够好,因为它接管了整个WinForms应用程序的控制权,当我关闭控制台时它也会关闭GUI表单。
我试图使用AttachConsole(int dwProcessId)
并将输出重定向到我正在启动的进程的控制台,但我无法弄清楚它为什么不起作用。
我无法将AttachConsole
放在其他地方,因为只有在流程开始运行后才能获取流程ID。
有什么建议吗?
P.S。我这样做是因为我需要对输出进行操作并将其“实时”打印给用户,如果您有任何其他与我在此处写的内容无关的建议,我会很高兴听到它们。
由于
public static void RedirectOutput(string program, string parameters)
{
Process process = new Process();
process.StartInfo.FileName = program;
process.StartInfo.Arguments = parameters;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.OutputDataReceived += new DataReceivedEventHandler(OutputConsoleHandler);
process.ErrorDataReceived += new DataReceivedEventHandler(OutputConsoleHandler);
process.Start();
AttachConsole(process.Id);
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
}
public static void OutputConsoleHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
Console.WriteLine(outLine.Data);
}
[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
答案 0 :(得分:0)
您需要实现自定义跟踪侦听器。在这个类中产生一个控制台窗口和内部的Write / Write Line方法,你可以将内容打印到窗口