这里有一个示例中,我写道,你可以尝试:
控制器:
public class HomeController : AsyncController
{
public ActionResult Index()
{
return View();
}
public void SomeTaskAsync(int id)
{
AsyncManager.OutstandingOperations.Increment();
Task.Factory.StartNew(taskId =>
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(200);
HttpContext.Application["task" + taskId] = i;
}
var result = "result";
AsyncManager.OutstandingOperations.Decrement();
AsyncManager.Parameters["result"] = result;
return result;
}, id);
}
public ActionResult SomeTaskCompleted(string result)
{
return Content(result, "text/plain");
}
public ActionResult SomeTaskProgress(int id)
{
return Json(new
{
Progress = HttpContext.Application["task" + id]
}, JsonRequestBehavior.AllowGet);
}
}
查看:
<script type="text/javascript">
$(function() {
var taskId = 543;
$.get('/home/sometask', { id: taskId }, function (result) {
window.clearInterval(intervalId);
$('#result').html(result);
});
var intervalId = window.setInterval(function() {
$.getJSON('/home/sometaskprogress', { id: taskId }, function (json) {
$('#progress').html(json.Progress + '%');
});
}, 5000);
});
</script>
<div id="progress"></div>
<div id="result"></div>
的想法是启动一个异步操作,将使用报告进展情况HttpContext.Application
这意味着每个任务必须具有唯一的ID。然后在客户端,我们启动任务,然后发送多个AJAX请求(每5秒)来更新进度。您可以调整参数以适应您的情况。进一步的改进是增加异常处理。
报告的输出是什么(screen,pdf?) – 2010-05-28 07:36:23
屏幕 - 无论是HTML还是JSON对象,对我而言都不重要(只要我得到回应,我就可以解析和显示)。 – Jason 2010-05-28 09:31:34
这不是ASP.Net SignalR的绝佳选择吗?我知道这是一条古老的线索,但现在我处于类似的情况。 – 2013-04-09 06:21:34