C# 如何将控制台cmd的输出通过管道传输到另一个类的TextBox
有一个C# 如何将控制台cmd的输出通过管道传输到另一个类的TextBox,c#,winforms,frameworks,C#,Winforms,Frameworks,有一个NewClass.cs,我在其中从cmd收集关于ipconfig的数据。如何将此类中的数据(通过参数)输出到表单上的文本框中 public static class NewClass { public static void Test() { ProcessStartInfo Info = new ProcessStartInfo { FileName = "cmd.exe",
NewClass.cs
,我在其中从cmd收集关于ipconfig
的数据。如何将此类中的数据(通过参数)输出到表单上的文本框中
public static class NewClass
{
public static void Test()
{
ProcessStartInfo Info = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = "ipconfig /all",
CreateNoWindow = false,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Normal
};
Process result = Process.Start(Info);
result.WaitForExit();
}
}
表单上有一个文本框,您需要从NewClass.cs
类调用Test方法(使用传递参数),以便命令行(cmd.exe)中的所有内容都显示在此TextBox
中,而不显示控制台。
如何实现这一点\
我试过这样做,但不起作用\
private void button1_click(object sender, EventArgs e)
{
IProgress<string> progress = new Progress<string>(s =>
{
textBox1.Text += s;
});
NewClass.Test(progress);
}
public static class NewClass
{
public static void Test(IProgress<string> progress)
{
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "ipconfig /all";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);
process.StartInfo.StandardErrorEncoding = Encoding.GetEncoding(866);
var handler = new DataReceivedEventHandler((s, e) => progress?.Report(e.Data));
process.OutputDataReceived += handler;
process.ErrorDataReceived += handler;
process.Start();
process.BeginOutputReadLine();
}
}
private void按钮1\u单击(对象发送者,事件参数e)
{
i进度=新进度(s=>
{
textBox1.Text+=s;
});
新课程测试(进度);
}
公共静态类NewClass
{
公共静态空隙试验(IProgress进度)
{
流程=新流程();
process.StartInfo.FileName=“cmd.exe”;
process.StartInfo.Arguments=“ipconfig/all”;
process.StartInfo.CreateNoWindow=true;
process.StartInfo.UseShellExecute=false;
process.StartInfo.RedirectStandardOutput=true;
process.StartInfo.RedirectStandardError=true;
process.StartInfo.standardoutpunecoding=Encoding.GetEncoding(866);
process.StartInfo.StandardErrorEncoding=Encoding.GetEncoding(866);
var handler=newdatareceivedeventhandler((s,e)=>progress?.Report(e.Data));
process.OutputDataReceived+=处理程序;
process.ErrorDataReceived+=处理程序;
process.Start();
process.BeginOutputReadLine();
}
}
帮助请参见此处显示的方法(和注释):。在您的情况下,设置Arguments=“START/WAIT/K ipconfig/all”
。不要在此处使用IProgress
,它不是必需的:请参阅SinchronizingObject
属性(使用表单,而不是TexBox/RichTextBox)。请参阅此处显示的方法(和注释):。在您的情况下,设置Arguments=“START/WAIT/K ipconfig/all”
。不要在此处使用IProgress
,它不是必需的:请参阅SinchronizingObject
属性(使用表单,而不是TexBox/RichTextBox)