Publier Profil Docs FAQ

Ebauche d'article

Lancer une tache de fond avec AJAX et les multithreads


Le but de ce tutoriel est de permettre de lancer des taches longues sans bloquer l'application, et permettre une visualisation en temps réel de l'avancement de la tache.

Pour effectuer cela, nous utiliserons les threads (System.threading) et les extensions AJAX de Microsoft.

Avant de débuter certaines contditions sont requises. L'action longue doit être inégrée a une classe, on doit pouvoir la lancer de cette manière

MonObjet.tacheLongue(); 

Il faudra pour suivre l'avancement de la tache que la classe possède un attribut public contenant un message qui donne l'état de la tache.

private String messageEtat; 
Attention ! La méthode qui sera appelée dans  un nouveau thread ne doit pas faire appel a des variables de sessions directement, donc pas de déclaration du type String machin = Session["machin"]; Ceci est aussi valable pour l'accès aux variables de type Server. D'une manière générale considérez votre classe comme indépendante a votre application et injectez les données nécéssaire a partir de la page aspx avant le lancement du thread.

Une fois les conditions réunies on peut passer a la préparation de la page aspx et de la partie qui va se charger de l'affichage de l'avancement de la tâche.
Après avoir placé le ScriptManager obligatoire pour toute page AJAX nous alons insérer un updatePanel a l'endroit désiré.

<asp:UpdatePanel ID="UpdatePanel1" runat="server">

    <ContentTemplate>

        <asp:Label ID="messageLabel" runat="server"></asp:Label><br />

        <asp:HyperLink ID="actionLink" runat="server" Target="_blank" Visible="False"

         Text="Telecharger le fichier généré"></asp:HyperLink><br />

        <asp:Timer ID="Timer1" runat="server" Enabled="false" Interval="25" OnTick="Timer1_Tick"></asp:Timer>

    </ContentTemplate>

</asp:UpdatePanel>