【发布时间】:2019-02-23 16:03:18
【问题描述】:
我目前正在尝试从我的 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();
}
}
}
【问题讨论】:
-
查看 MSDN 上的 Process.BeginOutputReadLine() 文章以获得良好的示例代码。它会提醒您为 OutputDataReceived 事件编写事件处理程序。 Task.Run() 会阻止您看到异常,请改用 Exited 事件。
-
@HansPassant 我似乎错过了将该部分放入我的代码中。对 c# 非常陌生,不确定这是否是您的意思。感谢您的意见!
-
尝试在 Start() 之前移动 muntrainout.OutputDataReceived。我见过的其他例子在开始这个过程之前就已经设置好了。
-
@KornMuffin 实际上我在此之前查看了该线程并遵循您关于移动“Start();”的想法。不幸的是没有变化。一定有什么简单的东西我错过了,我就是放不下!