我的应用程序是这样工作的:
- 上传 Excel 文件 + 转换为
DataTable
- 开始新线程
- 开始循环
DataTable
- 更新 UI (
Label
) 以显示“正在处理 [n] 的 [i] 行” - 下一个
- 更新 UI (
- 结束循环
粗体是我做不到的。我在网上四处寻找从工作线程更新 UI 元素,但我能找到的所有结果似乎都是针对 Windows 窗体,而不是 Web 项目。这可能吗?
我的应用程序是这样工作的:
DataTable
DataTable
Label
) 以显示“正在处理 [n] 的 [i] 行”粗体是我做不到的。我在网上四处寻找从工作线程更新 UI 元素,但我能找到的所有结果似乎都是针对 Windows 窗体,而不是 Web 项目。这可能吗?
是的,你可以做到,实际上并不难。您可以使用 ajax 工具箱轻松完成。只需使用更新面板,并更新进度。
检查http://ajaxcontroltoolkit.codeplex.com/
一个例子:http ://www.asp.net/ajax/documentation/live/overview/updateprogressoverview.aspx
我找到了使用 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 检查页面加载,如果工作线程处于活动状态,那么即使您离开并返回页面,进度条也会显示。