以下代码在普通的控制台应用程序中运行良好:
private void button1_Click(object sender, EventArgs e)
{
Process process = new Process();
process.StartInfo.FileName = @"a.exe";
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.Start();
process.BeginOutputReadLine();
}
void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
this.Invoke(new Action(delegate() { textBox2.Text += "\r\n" + e.Data; }));
}
但是在Web应用程序中,它启动'a.exe',但不输出到文本框。我该如何解决?感谢。
答案 0 :(得分:1)
您需要记住Web应用程序和控制台/ WinForms应用程序之间的区别。您必须将页面返回给客户端。目前你正在说“当进程写出一行时告诉我”,但随后立即返回页面......当进程写入任何内容时,网页将已经呈现。
您可能希望等待进程退出或至少等待几秒钟。请记住,用户在等待页面返回时不会看到任何内容。
你可以使用像Comet这样的技术做类似事件的事情,但这很复杂。