Как отправить аргументы командной строки из приложения Windows Form в C # для .NET? - PullRequest
0 голосов
/ 14 июля 2010

Это должно быть легко.

Примером может быть следующее:

Пользователь нажимает кнопку «Ping» и использует команду «ping» для проверки связи с сервером. Вывод записывается в строку и отображается в приложении Windows Forms для пользователя.

Ответы [ 4 ]

5 голосов
/ 14 июля 2010

Используйте класс Process, чтобы начать новый процесс. Вы можете перенаправить стандартную ошибку и вывод - в этом случае вы, вероятно, захотите сделать это на основе событий, чтобы записать текст в приложение, когда оно выйдет из ping.

Предполагая, что вы хотите, чтобы пользователь видел вывод, как он есть, вы не хотите использовать 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");
    }
}

Просто для примера, вот полное приложение 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);
    }
}
2 голосов
/ 14 июля 2010
Process p = System.Diagnostics.Process.Start("ping ...."); 
System.IO.StreamReader reader = p.StandardOutput; 
string sRes = reader.ReadToEnd(); 
reader.Close(); 

Строковая переменная sRes должна содержать результаты команды ping.

1 голос
/ 14 июля 2010
public static string Ping(string url)
{
    Process p = System.Diagnostics.Process.Start("ping.exe", url);
    StreamReader reader = p.StandardOutput;

    String output = reader.ReadToEnd();
    reader.Close();

    return output;
}
0 голосов
/ 14 июля 2010

Я довольно подробно об этом рассказывал в своем блоге .Вы можете скопировать и вставить полностью скомпилированный пример.Только с базовым пониманием Winforms вы можете заполнить пробелы самостоятельно.

...