c# - 在 WPF 窗口中捕获 CMD 的输出

标签 c# wpf

我目前正在尝试从我的 C# WPF 程序中运行一个简单的 CMD 函数,并在 WPF 程序中显示输出。我想我很接近,但它目前没有显示任何东西。该程序将打开并确认它应该运行 CMD 文件。选择"is"后,它应该打开一个新框架并运行程序,将其通过管道返回框架。引用的 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();
        }
    }
}

最佳答案

假设您想要在您的框架中显示输出...

这对我有用:

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

            }

它看起来有点难看,但它显示了输出......我不知道 Console.WriteLine() 应该如何写入你的框架?

关于c# - 在 WPF 窗口中捕获 CMD 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52406547/

相关文章:

c# - 如何显示另一个UI线程上的对话框

c# - 模块类型加载异常 : Failed to load type for module

wpf - 在特定键上使用 EventTrigger

wpf - 当内容适合窗口时,如何在wpf中隐藏滚动条?

wpf - FlowDocument 表中的单线边框

c# - WPF 使用数据/设置 ItemsSource 填充 Datagrid 的 DataGridCheckBoxColumn

c# - C# 和 "a constant value is expected"中的 switch 语句

c# - 从另一个任务访问 BackgroundMediaPlayer

c# - 如何使用Shuffling提高rng?

c# - 获取命令绑定(bind)上的点击位置