如何从新的线程vb.NET网站更新UI

如何从新的线程vb.NET网站更新UI,vb.net,multithreading,web-applications,Vb.net,Multithreading,Web Applications,我的应用程序的工作原理如下: 上传Excel文件并转换为DataTable 启动新线程 通过数据表开始循环 更新UI标签以显示[n]中的处理行[i] 下一个 端环 大胆是我不能做的。我在网上四处寻找工作线程中的UI元素更新,但我能找到的所有结果似乎都是针对Windows窗体的,而不是web项目。这可能吗?是的,你可以做到,实际上并不难。您可以使用ajax工具箱轻松地完成这项工作。只需使用updatepanel并更新进度 检查 例如:我找到了一个使用jQuery AJAX和asp.NET WebM

我的应用程序的工作原理如下:

上传Excel文件并转换为DataTable 启动新线程 通过数据表开始循环 更新UI标签以显示[n]中的处理行[i] 下一个 端环
大胆是我不能做的。我在网上四处寻找工作线程中的UI元素更新,但我能找到的所有结果似乎都是针对Windows窗体的,而不是web项目。这可能吗?

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

检查


例如:

我找到了一个使用jQuery AJAX和asp.NET WebMethods以及会话变量的解决方法

我使用了上一个方法中的一个方法,通过对工作线程更新的会话变量进行WebMethod检查

工作线程:

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

[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,则将显示Completed并清除循环,否则将显示[total]的Processing row[current]。我甚至还加了一个

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

我知道UpdatePanel/UpdateProgress控件,但在过去,他们遇到了太多的问题。我似乎也找不到一种方法来告诉UpdateProgress控件一个特定的值,以显示在[n]的我的需求处理行[I]中