Я в тупике.Я пытаюсь показать индикатор выполнения, пока мой сайт выполняет запрос.Запрос занимает от 4 до 6 минут.Мой индикатор выполнения получает свое значение из базы данных, Oracle имеет встроенный запрос для предоставления значений в индикатор выполнения.Я использую EssentialObjects 'ProgressBar .Обычно я просто устанавливаю «Value» в целое число от 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, таймер не запускается до завершения обратной передачи, поэтому индикатор выполнения никогда не отображается.Я пробовал обратный вызов, не уверен, правильно ли я это сделал, но на странице не будет отображаться результат во время обратной передачи.Как заставить таймер (или что-то еще) ответить, когда страница находится в асинхронной обратной передаче?