1

我的应用程序是这样工作的:

  • 上传 Excel 文件 + 转换为DataTable
  • 开始新线程
  • 开始循环DataTable
    • 更新 UI ( Label) 以显示“正在处理 [n] 的 [i] 行”
    • 下一个
  • 结束循环

粗体是我做不到的。我在网上四处寻找从工作线程更新 UI 元素,但我能找到的所有结果似乎都是针对 Windows 窗体,而不是 Web 项目。这可能吗?

4

2 回答 2

0

是的,你可以做到,实际上并不难。您可以使用 ajax 工具箱轻松完成。只需使用更新面板,并更新进度。

检查http://ajaxcontroltoolkit.codeplex.com/

一个例子:http ://www.asp.net/ajax/documentation/live/overview/updateprogressoverview.aspx

于 2012-12-06T20:10:24.190 回答
0

我找到了使用 jQuery AJAX 和 asp.NETWebMethod以及会话变量的解决方法。

我使用了我之前的一个问题中的一种方法,方法是WebMethod检查由工作线程更新的 Session 变量。

工作线程:

Session["progress"] = "{\"current\":" + (i + 1) + ", \"total\":" + dt.Rows.Count + "}"

网络方法:

[WebMethod]
public static string GetProgress()
    if (HttpContext.Current.Session["progress"] == null) {
        return "{\"current\":1,\"total\":1}";
    } else {
        return HttpContext.Current.Session["progress"];
    }
}

我的 jQuery 基本上每秒循环调用该 AJAX WebMethod。它将在页面加载时开始,如果current = total然后它将显示“已完成”并清除循环,否则将显示“正在处理 [total] 的 [current] 行”。我什至添加了一个jQuery UI 进度条

这是一种手动解决方案,但它解决了我的问题,而且开销很小。一个意想不到但不错的部分是,由于它使用 Session 变量,并且 WebMethod 检查页面加载,如果工作线程处于活动状态,那么即使您离开并返回页面,进度条也会显示。

于 2012-12-07T14:13:48.790 回答