Как передать вывод из консоли в TextBox из другого класса
Есть NewClass.cs в котором я собираю данные о ipconfig из cmd
Как мне из этого класса вывести данные ( через аргументы ) в TextBox который лежит на форме?!
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();
}
}
На форме лежит TextBox нужно сделать вызов метода Test(с передачей аргументов) из классаNewClass.cs чтобы всё из командной строки (cmd.exe) выводилось в этот TextBox без появления консоли.
Как это реализовать?\
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
IProgress колбэк здесь очень кстати.
private void button1_click(object sender, EventArgs e)
{
IProgress<string> progress = new Progress<string>(s =>
{
textBox1.SelectionStart = textBox1.Text.Length;
textBox1.SelectedText = s + Environment.NewLine;
textBox1.ScrollToCaret();
});
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 = "/K 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();
process.BeginErrorReadLine();
}
}
