【发布时间】:2012-10-16 10:33:22
【问题描述】:
我正在编写一个 Web 应用程序,该应用程序使用 System.Diagnostics 类在系统上运行命令。 我想显示命令的实时输出,这需要很长时间才能完成。经过一番搜索,我发现 BeginOutputReadLine 可以将输出流式传输到事件处理程序。
我也在使用 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 秒就会在警报框中得到“未定义”。 谁能建议我如何正确地做到这一点?
【问题讨论】:
-
你能解决你的问题吗?请告诉我;如果是,请标记为已回答 - 非常感谢! :)
标签: asp.net jquery asynchronous