为什么Process.OutputDataReceived在ASP.NET中不起作用,我该如何解决?

时间:2009-08-22 13:42:34

标签: c# asp.net asynchronous

以下代码在普通的控制台应用程序中运行良好:

    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',但不输出到文本框。我该如何解决?感谢。

1 个答案:

答案 0 :(得分:1)

您需要记住Web应用程序和控制台/ WinForms应用程序之间的区别。您必须将页面返回给客户端。目前你正在说“当进程写出一行时告诉我”,但随后立即返回页面......当进程写入任何内容时,网页将已经呈现。

您可能希望等待进程退出或至少等待几秒钟。请记住,用户在等待页面返回时不会看到任何内容。

可以使用像Comet这样的技术做类似事件的事情,但这很复杂。