0

私は長い処理を実行するページを持っているので(どこかに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%..)

何が問題なのですか?ありがとう!

4

2 に答える 2

1

これは、EndTask メソッドが呼び出された後にのみ、応答 (html) がクライアントに送信されるためです。progress.Text に加えている変更はすべて、サーバー側の変数のみを変更しているサーバー側にあります。

于 2013-03-15T10:23:07.463 に答える
0

私はシンプルなものを使ってしまった

スレッド t = 新しいスレッド(..)

ページを遅延させることなく async=true.

于 2013-03-18T16:14:46.447 に答える