我有執行長處理的頁面(寫一些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