在WPF窗口中捕获来自CMD的输出

时间:2018-09-19 13:04:07

标签: c# wpf

我目前正在尝试从C#WPF程序运行一个简单的CMD函数,并在WPF程序中显示输出。我想我已经接近了,但目前没有显示任何内容。该程序将打开并确认应运行CMD文件。一旦选择“是”,它将打开一个新框架并运行该程序,并将其通过管道传输回该框架。引用的CMD是一个简单的netstat cmd。我已将'CreateNoWindow'更改为False并看到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 :(得分:0)

假设您想在frame ...

中显示输出

这对我有用:

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

            }

看起来有点丑陋,但是会显示输出...我不知道Console.WriteLine()应该如何写入您的框架?