私は長い処理を実行するページを持っているので(どこかにpdfを書いてください)、次のようになります:
私の ArchiveDoc.aspx ページ: (ページにはラベル (progress と呼ばれます) と Async="true" がページ ディレクティブにあります)
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()) が呼び出されますが、Web ページは更新されません。ブラウザーで読み込みシンボルが空白のページで表示され、スレッドが完了すると、ページは最終的に「OK」を表示します。進行状況は表示されません (10%.. 20%..)
何が問題なのですか?ありがとう!