我很難過。我試圖顯示一個進度條,而我的網站執行查詢。查詢需要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()的代碼將有所幫助... –