c# - 如何从 .NET WPF 运行 C 程序的 .exe?

标签 c# c wpf

我想从我的 WPF 应用程序运行用 C 语言编写的“pocketsphinx_continuous.exe”程序。目前我使用命令提示符运行它。 pocketsphinx_continuous.exe 需要参数。

命令将是这样的。打开cmd,进入pocketsphinx_continuous.exe所在文件夹并运行,

pocketsphinx_continuous.exe -infile test\data\goforward.raw -hmm model\en-us\en-us -lm model\en-us\en-us.lm.bin -dict model\en-us\cmudict-en-us.dict

程序在命令提示符下打印一个字符串。相反,我想将此字符串获取到我的 WPF 应用程序。

假设,对于单击按钮,我想运行上面的程序并将结果字符串获取到同一窗口中的文本框。运行 C 程序应该在后台进行。

我应该怎么做?我是否必须在 C 和 WPF 应用程序之间编写服务?

最佳答案

您必须使用Process.Start()启动进程并重定向其控制台输出。甚至可以在后台执行此操作并隐藏控制台窗口。

创建一个像这样的新流程:

var process = new Process 
{
    StartInfo = new ProcessStartInfo 
    {
        FileName = "pocketsphinx_continuous.exe",
        Arguments = "-infile test\data\goforward.raw -hmm model\en-us\en-us -lm model\en-us\en-us.lm.bin -dict model\en-us\cmudict-en-us.dict",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
    }
};

现在您可以启动该进程并重定向控制台输出:

process.Start();
while (!proc.StandardOutput.EndOfStream) 
{
    string line = process.StandardOutput.ReadLine();
}

line 将包含程序输出的一行,您可以用它做任何您想做的事情。

关于c# - 如何从 .NET WPF 运行 C 程序的 .exe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48108192/

相关文章:

wpf - 在 DependencyProperty 的 CoerceValueCallback 中取消更新时如何更新绑定(bind)源?

c# - WPF跨线程消息框不阻塞主线程输入

c# - 是否可以将两个源属性绑定(bind)到一个控件属性?

c# - 双标有什么区别?和一个双倍,为什么我不能隐式转换它们?

为用户数据选择 const 与非常量指针

c - 我在 Xcode 6 上安装 SDL2 时遇到困难

c# - 使用PostSharp如何获取原方法中的方法名?

c# - Websphere MQ - 在 .NET 中从一个队列移动到另一个队列时保持消息上下文和身份

c - 为什么这个 C 程序的输出不正确

.net - 在 WinForms 中使用自定义 WPF 控件