带有池的asp.net异步线程
我有一个长期运行的任务,我需要在网页上实现。我想做的是在一个单独的线程上运行任务,但是在网页上有一个进度条 我正在努力找到一个简单的方法来做到这一点。这里是一个非常简单的例子,我想在上面做这个。基本上,我希望ResetAll()在一个线程中,并将变量y汇集在一起以更新网页UI 有人能帮我吗带有池的asp.net异步线程,asp.net,multithreading,asynchronous,Asp.net,Multithreading,Asynchronous,我有一个长期运行的任务,我需要在网页上实现。我想做的是在一个单独的线程上运行任务,但是在网页上有一个进度条 我正在努力找到一个简单的方法来做到这一点。这里是一个非常简单的例子,我想在上面做这个。基本上,我希望ResetAll()在一个线程中,并将变量y汇集在一起以更新网页UI 有人能帮我吗 Protected Sub btnReset_Click(sender As Object, e As System.EventArgs) Handles btnResetLowConductor.Click
Protected Sub btnReset_Click(sender As Object, e As System.EventArgs) Handles btnResetLowConductor.Click
ResetAll()
End Sub
Private Sub ResetAll()
Dim y As Integer = 0
While y < x
y += 1
Reset()
lblProgress.Text = y & "/" & x
End While
End Sub
Private Sub Reset()
Threading.Thread.Sleep(200)
End Sub
Protected Sub btnReset_Click(发送者作为对象,e作为系统.EventArgs)处理btnResetLowConductor。单击
ResetAll()
端接头
私有子重置全部()
将y调整为整数=0
而y
只要线程处于活动状态,lblProgress就不会更新。您将只获得y和x的最终值,即当线程失效时。可以将Y和X的值存储在会话变量中
Private Sub ResetAll()
Dim y As Integer = 0
While y < x
y += 1
Reset()
Session("CurrentStatus") = y & "/" & x
End While
End Sub
代码隐藏:C#
由于这是一个网站,您可能需要使用某种ajax方法定期回调服务器。以下是我所能看到的您的程序的基本流程:
- 用户进行初始呼叫
- 启动新线程以运行进程并返回0%状态
- 定期通过ajax调用web服务器(返回完成百分比的GetStatus调用)
- 如果呼叫完成,请适当更新/刷新页面
- 如果呼叫未完成,则使用返回状态
最后,如果您可以升级到.NET 4.0,那么使用TPL(任务并行库)将变得更加简单。您对网页的工作方式感到困惑 一旦启动线程并将响应写入客户端,您将无法在线程进行时继续更新页面
做这类事情的一种方法是使用Ajax。UlTop已经向您展示了一种实现这一点的方法;您所需要做的就是让他编写的javascript函数自己调用,直到100%完成为止。你可以用定时器来完成这项工作。好的,在各种网站的帮助下,我成功地做到了这一点 这里是一个示例项目。如果有任何问题,请告诉我。我不是专家,所以我想要一些反馈
function GetCurrentThreadStatus()
{
PageMethods.GetThreadStatus(function(status){
// success
$("span[id*='lblProgress']").text(status);
});
}
[WebMethod]
public static string GetThreadStatus()
{
return (string)Session["CurrentStatus"];
}