Как скопировать строку процесса CMD.exe в текстовое поле С#

Мне нужно скопировать строки вывода CMD в текстовое поле, это возможно? если да, пожалуйста, покажите мне, как с этим справиться

enter code here
      private void pictureBox1_Click(object sender, EventArgs e)
       {
        label10.Visible = true;
        string cmd = "/c  adb install BusyBox.apk ";
        System.Diagnostics.Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = "cmd.exe";
        proc.StartInfo.Arguments = cmd;
        proc.StartInfo.RedirectStandardError = true;

        proc.StartInfo.UseShellExecute = false;
        //proc.StartInfo.CreateNoWindow = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.Start();

        proc.WaitForExit();
        pictureBox6.Visible = true;
        label10.Text = "Installation Complete";
        // MessageBox.Show("Install Complete ...");
        DateTime Tthen = DateTime.Now;
        do
        {
            Application.DoEvents();
        } while (Tthen.AddSeconds(4) > DateTime.Now);
        label10.Visible = false;
        pictureBox6.Visible = false;

    }

person Abdo Hurbly    schedule 06.05.2016    source источник
comment
Да, вам нужно перехватить события OutputDataReceived и ErrorDataReceived и написать функции, которые вызовут добавление к вашему текстовому полю в потоке пользовательского интерфейса. например см. этот старый вопрос   -  person Rup    schedule 06.05.2016
comment
Да, это работает для меня, но ... не то, что я хочу ... Мне нужно прочитать это шаг за шагом в точном смысле. Мне нужно показать, что происходит сейчас на CMD и прошлое на Textbot ... То, как я сделал, это ждать проц. чтобы закончить и пропустить результат в текстовом поле... возможно ли сделать что-то подобное в С#?   -  person Abdo Hurbly    schedule 06.05.2016
comment
См. веб-страницу: msdn. microsoft.com/en-us/library/   -  person jdweng    schedule 06.05.2016
comment
Если вы подключите события, вы будете получать данные шаг за шагом, а не все за один раз.   -  person Rup    schedule 06.05.2016
comment
Я бы использовал RichTextBox, а не TextBox, потому что по умолчанию он многострочный, и вы можете раскрасить стандартный вывод и вывод ошибок разными цветами.   -  person Clijsters    schedule 06.05.2016


Ответы (2)


Ну вы уже все настроили как надо, не хватает только:

string consoleOutput = proc.StandardOutput.ReadToEnd();
person Manfred Radlwimmer    schedule 06.05.2016

Используйте это, тогда строка будет содержать весь вывод

proc.Start();
string line = proc.StandardOutput.ReadToEnd();

или за одну строку

proc.Start();
string line = proc.StandardOutput.ReadLine();

и если вы хотите вывести строку за строкой, тогда

while (!proc.StandardOutput.EndOfStream) {
    string line = proc.StandardOutput.ReadLine();
    // do your stuff
}

или вы можете попробовать и это, сначала удалите proc.WaitForExit();, потому что ReadLine будет ждать, пока данные не будут доступны или поток не будет закрыт. Когда поток закрыт, ReadLine вернет null.

string line;
while ((line = proc.StandardOutput.ReadLine())!=null) 
{
    // textbox.text = line or something like that
}
person Mostafiz    schedule 06.05.2016
comment
@AbdoHurbly Still something missing хотите уточнить? - person Manfred Radlwimmer; 06.05.2016
comment
что не хватает пожалуйста? - person Mostafiz; 06.05.2016
comment
@MostafizurRahman большое спасибо, это был полезный ответ :) спасибо - person Abdo Hurbly; 06.05.2016