Захват вывода из CMD в окне WPF - PullRequest
0 голосов
/ 19 сентября 2018

В настоящее время я пытаюсь запустить простую функцию CMD из моей программы C # WPF и отобразить вывод в программе WPF.Я думаю, что я близко, но в настоящее время ничего не отображается.Программа откроется и получит подтверждение, что она должна запустить файл CMD.После того, как выбрано «Да», он должен открыть новый фрейм и запустить программу, отправив ее обратно в фрейм.Ссылка на CMD - это простая команда netstat.Я изменил «CreateNoWindow» на «Ложь» и вижу открытие CMD, поэтому оно, похоже, выполняет его.

РЕДАКТИРОВАТЬ: я пропустил часть своего кода, упс!

РЕДАКТИРОВАТЬ 2:Обновлен код для включения некоторых предложений.Без изменений.Может быть, это связано с тем, как я использую фрейм?

namespace WpfApp1
{
/// <summary>
/// Interaction logic for Page3.xaml
/// </summary>
    public partial class Page3 : Page
    {
        public Page3()
        {
            InitializeComponent();
        }

        private void Frame_Navigated(object sender, NavigationEventArgs e)
        {
            Task.Run(() => { Muntrainout(); });
        }

        public void Muntrainout()
        {
            System.Diagnostics.Process muntrainout = new System.Diagnostics.Process();
            muntrainout.StartInfo.RedirectStandardOutput = true;
            muntrainout.StartInfo.RedirectStandardError = true;
            muntrainout.StartInfo.RedirectStandardInput = true;
            muntrainout.StartInfo.UseShellExecute = false;
            muntrainout.StartInfo.CreateNoWindow = true;
            muntrainout.StartInfo.FileName = @"C:\Users\user.name\Documents\Project\Test.cmd"; 
            muntrainout.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler((sender, e) =>
                 {
                     Console.WriteLine(e.Data);
                 }
            );
            // Error Handling
            muntrainout.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler((sender, e) => { Console.WriteLine(e.Data); });
            muntrainout.Start();
            muntrainout.BeginOutputReadLine();
            muntrainout.WaitForExit();
        }
    }
}

1 Ответ

0 голосов
/ 20 сентября 2018

Предполагая, что вы хотите отобразить вывод в вашем frame ...

, это работает для меня:

muntrainout.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler((sender, e) =>
            {
                //Console.WriteLine(e.Data);
                Frame1.Dispatcher.Invoke(() => { Frame1.Content += e.Data+Environment.NewLine; });

            }

Это выглядит немного некрасиво, но отображает вывод ..Я не знаю, как Console.WriteLine() должен писать в ваш фрейм?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...