Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将控制台cmd的输出通过管道传输到另一个类的TextBox_C#_Winforms_Frameworks - Fatal编程技术网

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)