這裏有一個示例中,我寫道,你可以嘗試:
控制器:
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