首页 > 解决方案 > 允许 OutputDataReceived 从外部调用的程序中获取输出

问题描述

我正在尝试通过 C# 程序运行服务器,并且我已经得到了一般的 cmd 执行工作,但是每当我尝试启动像服务器这样的东西时,比如 rust,它不会输出服务器发送到文本中的内容框,而不是将其发送到命令提示符,该命令提示符通常应保持空白。我相信这是因为它在 winform 应用程序中创建了第二个 conhost.exe 用于专门托管游戏,并且它没有捕获其中的输出。有什么方法可以让它也接受该输出吗?这是我正在使用的代码:

BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (sender, args) =>
{
    p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardInput = true;
    p.StartInfo.RedirectStandardError = true;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.CreateNoWindow = false; // Disabled for testing only.
    p.Start();
    if(p!= null) {
        p.ErrorDataReceived += ((s, ev) => {
            string sData = ev.Data;
            sData += "\r\n";
            ControlInvoke(richTextBox1, () => richTextBox1.Text += sData);
            System.Threading.Thread.Sleep(10);
        });
        p.OutputDataReceived += ((s, ev) =>
        {
            string sData = ev.Data;
            sData += "\r\n";
            ControlInvoke(richTextBox1, () => richTextBox1.Text += sData);
            System.Threading.Thread.Sleep(10);
        });
        p.BeginOutputReadLine();
    }
};
bw.RunWorkerAsync();

应用程序和命令提示符的输出

标签: c#command-prompt

解决方案


推荐阅读