私は困惑しています。私はサイトがクエリを実行している間に進行状況バーを表示しようとしています。クエリーには4〜6分かかります。私の進行状況バーはその値をデータベースから取得し、Oracleは進捗バーに値を提供する組み込みのクエリを持っています。私はEssentialObjects' ProgressBarを使用しています。基本的に私はちょうどここで1から100非同期ポストバック中にページを更新するにはどうすればよいですか?
間の整数に "価値" を設定し、私のコードの簡易版である:
ページ:
<asp:UpdatePanel ID="upQuery" runat="server">
<ContentTemplate>
<asp:Button ID="btnExecute" runat="server" OnClick="btnExecute_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="upProgress" runat="server">
<ContentTemplate>
<asp:Timer ID="tmr" runat="server" Enabled="false"
OnTick="tmr_Tick" Interval="3000"></asp:Timer>
<eo:ProgressBar ID="pbr" runat="server" ></eo:ProgressBar>
</ContentTemplate>
</asp:UpdatePanel>
コード:
protected void btnExecute_Click(object sender, EventArgs e) {
tmr.Enabled = true;
ExecuteLongQuery();
}
protected void tmr_Tick(object sender, EventArgs e) {
pbr.Value = GetProgress();
}
基本的には、btnExecuteをクリックすると、ポストバックが完了するまでタイマーが開始されず、プログレスバーは表示されません。私はコールバックを試みました、私はそれを正しかったかどうかはわかりませんが、ページはポストバック中に結果を表示しませんでした。ページが非同期のポストバック中に応答するタイマー(または何か)を取得するにはどうすればよいですか?
スレッドやその他のコードに関する詳細情報を提供する必要があります。考え方は、クエリ/クラスのProgressChangedイベントを購読するか、クラス内でユーザーインターフェイスを呼び出すことですが、両方の方法で、より多くのコードを参照する必要があります。 –
これはウェブページであり、Windowsフォームではありません。私はカスタムコントロールを使用しているため、ProgressChangedイベントはありません。私は何を供給する必要があるか分かりません。 – tedski
ExecuteLongQuery()のコードは役に立ちます... –