我正在編寫一個Web應用程序,其中應用程序在使用System.Diagnostics類的系統上運行命令。 我想顯示一個需要很長時間才能完成的命令的實時輸出。搜索了一下後,我發現BeginOutputReadLine可以將輸出流傳輸到事件處理程序。在asp.net中實時顯示命令行程序的輸出
我也在使用jquery ajax來調用這個方法,並讓這個進程異步運行。 到目前爲止,我試圖做這種方式:
Process p2= new Process(); p2.OutputDataReceived += new DataReceivedEventHandler(opHandler); p2= Process.Start (psi2);
p2.BeginOutputReadLine();
我已經聲明瞭一個靜態變量,以命令的輸出保存爲網頁上的標籤一類不會是從靜態訪問方法。
public class ProcessOutput
{
public static string strOutput;
[WebMethod]
public static string getOutput()
{
return strOutput;
}
}
在BeginOutputReadLine的事件處理函數中,使用輸出中的行設置變量。
private static void opHandler(object sendingProcess,DataReceivedEventArgs outLine)
{
if (!String.IsNullOrEmpty(outLine.Data))
{
ProcessOutput.strOutput= outLine.Data;
}
}
和ASPX頁面,我打電話的方法來獲得strOutput
的我不知道爲什麼值$(document).ready(function() {
setInterval(function() {
$.ajax({
type: "GET",
url: "newscan.aspx/getOutput",
data: "",
success: function(msg){
$('#txtAsyncOp').append(msg.d);
}
});
}, 1000);
});
,但拉布勒是不會得到更新。如果我放置警報,則每10秒在警報框中顯示「未定義」。 任何人都可以建議我如何正確地做到這一點?
你能解決你的問題嗎?請告訴我;如果是的話,請標記爲已回答 - 謝謝! :) – webbexpert