1

これが私が問題を抱えているシナリオです...

実行したい SQL ストアド プロシージャがあり、それが完了するのを待っている間 (数秒かかります)、更新パネル内のラベルをカウンターで更新したいと考えています。

以下のコードは updatePanel を update メソッドを呼び出したときに更新しませんが、その理由はわかりません。通話全体が終了すると、パネルのみが更新されます。

助言がありますか?

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 という数字が表示されます (基本的には 1 秒あたり 2) が、0 を表示してから 1 に更新し、次に 2 に更新するなどのように表示したいと考えています。など... UpdatePanel は、呼び出されるたびに更新されるのではなく、1 回だけ更新されるようUpdatePanel1.Update()です。

4

1 に答える 1

0

操作は非同期であるため、awaitはスリープよりも次の利点があります。

  • 状態情報
  • ステータスの更新
  • 操作が完了しない場合に発生する可能性のある無限ループを回避する
于 2013-02-27T21:24:27.487 に答える