1

这是我遇到麻烦的场景...

我有一个要执行的 SQL 存储过程,在等待它完成时(这将需要几秒钟),我想用计数器更新更新面板内的标签。

当我调用它的更新方法时,下面的代码不会更新 updatePanel,我不知道为什么。它只会在整个通话结束后更新面板。

有什么建议么?

ASPX:

<form id="form1" runat="server">
<div>
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"></asp:ScriptManager>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
</form>

代码隐藏:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

'assume code for sql command is already setup and the stored proc does indeed execute

Dim count As Integer = 0
Dim result As IAsyncResult = cmd.BeginExecuteNonQuery()
While Not result.IsCompleted
    Label1.Text = count
    UpdatePanel1.Update()
    Threading.Thread.Sleep(500)
    count += 1
End While

End Sub

例如,存储过程需要 10 秒才能执行,我最终在标签中看到数字 20(基本上每秒 2 个),但我想看到它显示 0,然后更新为 1,然后更新为 2,等等,等等...... UpdatePanel 似乎只更新一次,而不是每次UpdatePanel1.Update()被调用。

4

1 回答 1

0

由于操作是异步的,与睡眠相比,await将为您提供以下优势:

  • 状态信息
  • 状态更新
  • 如果操作永远不会完成,请避免可能的无限循环
于 2013-02-27T21:24:27.487 回答