c# - 允许 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();
解决方案
推荐阅读
- javascript - 页面加载时出现奇怪的滚动问题
- apache-spark - 当调用 sc.textFile("hdfs://.....") 时,将在 spark 和 hdfs 之间建立多少个连接
- go - 给定两个绝对URI,求它们之间的相对路径
- karate - 如何使用空手道 API 解析以下 JSON 响应
- google-bigquery - BigQuery 等效于“CREATE TABLE my_table (LIKE your_table)”
- javascript - 隐藏的输入值,表单循环中的非唯一 ID
- php - Laravel 5.5 路由控制器 [页面未找到]
- r - 通过自相关法计算音高误差
- amazon-web-services - AWS:在 redshift 中自动查询
- java - Angular中http.post的参数传递调用java Web API