Je suis perplexe. J'essaie d'afficher une barre de progression pendant que mon site exécute une requête. La requête prend de 4 à 6 minutes. Ma barre de progression tire sa valeur de la base de données, Oracle a une requête intégrée pour fournir les valeurs à la barre de progression. J'utilise EssentialObjects' ProgressBar. En fait, je viens de mettre en "valeur" à un nombre entier compris entre 1 et 100.Comment mettre à jour une page pendant une publication asynchrone?
Voici une version simplifiée de mon code:
Page:
<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>
code:
protected void btnExecute_Click(object sender, EventArgs e) {
tmr.Enabled = true;
ExecuteLongQuery();
}
protected void tmr_Tick(object sender, EventArgs e) {
pbr.Value = GetProgress();
}
Fondamentalement, lorsque je clique sur btnExecute, la minuterie ne démarre pas tant que la publication n'est pas terminée, ce qui fait que la barre de progression ne s'affiche jamais. J'ai essayé un rappel, pas sûr si je l'ai fait correctement, mais la page ne montrerait pas le résultat pendant la publication. Comment est-ce que j'obtiens le temporisateur (ou n'importe quoi) pour répondre pendant que la page est dans la publication asynchrone?
Vous devez donner plus d'informations sur les threads et plus de code. L'idée est, soit vous vous abonnez à l'événement ProgressChanged de votre requête/classe ou à l'intérieur de la classe, invoquez l'interface utilisateur, mais dans les deux sens, pour aider, nous avons besoin de voir plus de code. –
Ceci est une page Web, pas un formulaire Windows. Il n'y a pas d'événement ProgressChanged, car j'utilise un contrôle personnalisé. Je ne sais pas quoi d'autre je dois fournir .. – tedski
Le code pour ExecuteLongQuery() serait utile ... –