IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

les boucles qui bloquent l'application


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut les boucles qui bloquent l'application
    Bonjour à tous,

    J'ai un problème récurent dans mes applis, je m'explique :

    L'utilisation des dataTables est vraiment pratique et je les utilisent beaucoup, mais voilà, bien souvent je dois m'occuper de parcourir chaques lignes dans une boucle et parfois les traitements sont longs (création de fichiers par ex.).

    Le problème c'est que ce style de boucle ( for, for each... ou while ) bloque litteralement l'appli.

    Je débute relativement en VB.net et j'ai essayé de regarder du côté des thread, le problème c'est que dans ce cas, mes variables dataSet ou datatables ne sont plus accessibles.

    Bref, je ne m'en sort pas.
    Quelqu'un a-t-il l'habitude de ce genre de situation svp ?

    News.

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    tu peut éssayer ça ( en C#, je ne connais pas le VB mais la conversion n'est pas difficile )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public void TraitementLong()
    {
     this.Enabled = false;
     try
     {
       for(....)
       {
         Application.DoEvents();
         ...
       }
     }
     finally
     {
      this.Enabled = true;
     }
    }
    L'histoire du enabled=false c'est simplement une méthode pour s'assurer qu'une action de l'utilisateur ne provoque pas une "réentrée" dans la fonction TraitementLong avant que celle ci ne soit terminée, car Application.DoEvents() vide la liste des méssages windows et provoque la mise à jour de l'interface.

  3. #3
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    C'est peut être un probléme conceptuelle.

    Quelle est le volume traité ? Si c'est vraiment énorme, est-ce que l'utilisateur a vraiment besoin d'attendre le résultat ? (si non un traitement asynchrone déporté sur le serveur est le bienvenu).

    La solution de smyley est pratique, mais n'empêche pas l'utilisateur d'attendre.

    Peux-tu préciser les volumes, les traitements, voire poster un bout de code.

    Cdt.

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    si l'utilisateur n'a pas besoin d'attendre, ceci pourrai t'aider :
    http://www.developpez.net/forums/sho...d.php?t=379122

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    parfois il est bien de charger que ce qui est visible
    et de charger au fur et à mesure de l'utilisation des données ...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par olsimare
    Bonjour.

    C'est peut être un probléme conceptuelle.

    ...

    Peux-tu préciser les volumes, les traitements, voire poster un bout de code.

    Cdt.
    En fait c'est assez variable, c'est la troisième fois que je tombe sur ce type de problème. A chaque fois, l'utilisateur doit attendre le resultat, mais la première fois je suis tombé sur un exception et j'ai dû faire un "pompage" des messages ( je parcourait une 20aine de feuilles excel en utilisant Interop) ça prennait une minute environ.

    Le problème n'est pas vraiment de lancer une tâche en background, mais d'éviter l'effet de gel de l'application qui est toujours génant pour l'utilisateur.

    Je vais tenter ton premier exemple, smyley, car les threads, ce n'est pas encore mon niveaux... dans quelques temps peut-être.

    news.

Discussions similaires

  1. Réponses: 39
    Dernier message: 24/04/2010, 21h34
  2. boucle qui liste les fichiers
    Par koKoTis dans le forum VBScript
    Réponses: 7
    Dernier message: 23/01/2008, 16h08
  3. Boucle qui parcourt tout les ligne d'un fichier text
    Par accro-macro dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 10/05/2007, 20h21
  4. champ d'un recordset qui bloquent les autres
    Par zooffy dans le forum ASP
    Réponses: 3
    Dernier message: 01/02/2007, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo