0

我有一个形成为 Html 表的转发器。预览大概是这样的:

| No |    Name   |    Status   |
--------------------------------
| 1. | Process A | In Progress |
| 2. | Process B | In Progress |
| 3. | Process C | In Progress |
| 4. | Process D | In Progress |
...
| n. | Process N | In Progress |
--------------------------------

我将中继器放置在更新面板内。

当我点击一个按钮时,表单会调用这样一个发送过程函数。该函数将为每一行循环并将状态文本从“进行中”设置为“已发送”。假设这个过程大约是 2 秒,我想在分配状态文本后通过 UpdatePanel.Update() 更新中继器中的状态文本,但我的问题是状态不会更新。功能完成后更新。

发送函数是这样的:

protected void btnSend_Clicked(object sender, EventArgs e) 
    {
        foreach (RepeaterItem item in rptData.Items) 
        {
            UpdatePanel upnlStatus = (UpdatePanel)item.FindControl("upnlStatus");
            Literal litStatus = (Literal)item.FindControl("litStatus");
            System.Threading.Thread.Sleep(2000);
            litStatusText = "Sent";
            upnlStatus.Update();                
        }
    }

我的问题是做这件事的最佳方法是什么?更新面板是否支持这种实时更新?提前致谢。

4

1 回答 1

0

更新面板的 AsyncPostback 模式是

  1. 客户提出要求
  2. 服务器做一个任务
  3. 客户端已更新

因此,它在执行 3 之前等待 2 完成。您无法通过服务器上的任务执行来触发客户端的更新,因为服务器进程在每个 AsyncPostback 之间不再存在于服务器上。整个页面是从每个 AsyncPostback 之间的视图状态重新创建的。

要执行您想要执行的操作,您需要异步启动任务并稍后检索结果。这样做的常用方法是使用Web 服务。还要检查这个

于 2012-05-15T14:16:34.990 回答