我有执行长处理的页面(写一些PDF的地方),所以我有以下几点:长处理线程异步ASP.NET网页
我ArchiveDoc.aspx页: (页已经在页面指令一个标签(称为进度)和异步=“真”)
delegate void archiveFuncDelegate(int idTurnover, string serverMapPath);
delegate void UpdateUIDelegate(string Text);
protected void Page_Load(object sender, EventArgs e)
{
Page.AddOnPreRenderCompleteAsync(BeginTask, EndTask);
this.progress.Text = "0";
}
private void UpdateUI(string Text)
{
this.progress.Text = Text;
}
private IAsyncResult BeginTask(object sender, EventArgs e, AsyncCallback cb, object state)
{
// invoke
archiveFuncDelegate del = asyncArchivageFacture;
IAsyncResult result = del.BeginInvoke(cb,null);
return result;
}
private void EndTask(IAsyncResult ar)
{
if (!ar.IsCompleted)
{
progress.Text = "Error";
}
else
{
progress.Text = "OK";
}
}
#region Archive (thread)
// long processing task (exemple)
public void asyncArchivageFacture()
{
// exemple
int total = 101;
int progress = 0;
for(int i=0; i<total; i++)
{
progress = i*100/total;
updateUi.Invoke(progress + "%");
Thread.Sleep(2000);
}
}
#endregion
当我把我的页面,该线程调用(asyncArchivageFacture()还有UpdateUI()),但网页永远不会得到更新:我在浏览器中得到了一个空白页面的加载符号,并且一旦线程完成,该页面最后显示'OK'。它不显示进度(10%.. 20%..)
任何想法有什么不对? 谢谢!
HTTP是无状态的。您需要一个ajax组件来轮询进度。或者,看看SignalR。 – 2013-03-15 10:35:03