2009-08-22 53 views
1

下面的代碼是一個正常的控制檯應用程序工作的偉大:爲什麼Process.OutputDataReceived在ASP.NET中不起作用,我該如何解決它?

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

您需要記住Web應用程序和控制檯/ WinForms應用程序之間的區別。你必須返回一個頁面給客戶端。目前你在說「當流程寫出一行時告訴我」,然後立即返回頁面......在流程寫入任何內容之前,網頁已經呈現。

您可能希望等待進程退出或至少等待幾秒鐘。請記住,用戶在等待頁面返回時不會看到任何內容。

可以使用像Comet這樣的技術做類似事件的事情,但這很複雜。

相關問題