如何从C#for .NET中的Windows窗体应用程序发送命令提示符参数?

gre*_*357 0 c# command-line visual-studio-2010

这应该是一个简单的.

一个例子如下:

用户单击标题为"Ping"的按钮,它使用命令提示符"ping"来ping服务器.输出以字符串形式捕获,并在Windows窗体应用程序中显示给用户.

Jon*_*eet 5

使用Process该类启动新进程.您可以重定向标准错误和输出-在这种情况下,你可能想在一个事件驱动的方式这样做,将文本写入应用程序时,它出来平.

假设您希望用户看到输出,您希望在输出上使用ReadToEnd - 这将阻塞直到它完成.

这是一个写入控制台的完整示例 - 但它显示了如何在进程写入输出时执行此操作,而不是等待进程完成:

using System;
using System.Diagnostics;

class Test
{
    static void Main(string[] args)
    {
        ProcessStartInfo psi = new ProcessStartInfo("ping")
        {
            UseShellExecute = false,
            RedirectStandardError = true,
            RedirectStandardOutput = true,
            Arguments = "google.com"
        };
        Process proc = Process.Start(psi);
        proc.EnableRaisingEvents = true;
        proc.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
        proc.BeginOutputReadLine();
        proc.ErrorDataReceived += (s, e) => Console.WriteLine(e.Data);
        proc.BeginErrorReadLine();
        proc.WaitForExit();
        Console.WriteLine("Done");
    }
}
Run Code Online (Sandbox Code Playgroud)

只是为了衡量,这是一个完整的WinForms应用程序:

using System;
using System.Drawing;
using System.Diagnostics;
using System.Windows.Forms;

class Test
{
    [STAThread]
    static void Main(string[] args)
    {
        Button button = new Button {
            Text = "Click me",
            Dock = DockStyle.Top
        };        
        TextBox textBox = new TextBox {
            Multiline = true,
            ReadOnly = true,
            Location = new Point(5, 50),
            Dock = DockStyle.Fill
        };
        Form form = new Form {
            Text = "Pinger",
            Size = new Size(500, 300),
            Controls = { textBox, button }
        };

        Action<string> appendLine = line => {
            MethodInvoker invoker = () => textBox.AppendText(line + "\r\n");
            textBox.BeginInvoke(invoker);
        };

        button.Click += delegate
        {        
            ProcessStartInfo psi = new ProcessStartInfo("ping")
            {
                UseShellExecute = false,
                RedirectStandardError = true,
                RedirectStandardOutput = true,
                Arguments = "google.com"
            };
            Process proc = Process.Start(psi);
            proc.EnableRaisingEvents = true;
            proc.OutputDataReceived += (s, e) => appendLine(e.Data);
            proc.BeginOutputReadLine();
            proc.ErrorDataReceived += (s, e) => appendLine(e.Data);
            proc.BeginErrorReadLine();
            proc.Exited += delegate { appendLine("Done"); };
        };

        Application.Run(form);
    }
}
Run Code Online (Sandbox Code Playgroud)