繁体   English   中英

具有长处理线程的ASP.NET异步网页

[英]ASP.NET Asynchronous web page with long processing thread

我有一个页面执行长时间处理(在某处写一些pdf),所以我有以下内容:

我的ArchiveDoc.aspx页面 :(该页面在页面指令中具有Label(称为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()),但是网页从未更新:我在浏览器中得到一个带有空白页面的加载符号,一旦线程完成,页面最终显示“确定”。 它不显示进度(10%.. 20%..)

知道有什么问题吗? 谢谢!

这是因为仅在调用EndTask方法之后才将response(html)发送到客户端。 无论您对进度进行什么更改,文本都在服务器端,您只在其中更改服务器端变量。

我最终使用了一个简单的

线程t =新线程(..)

而不会将页面异步化为async = true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM