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

C# Discussion :

Exécution synchrone ou asynchrone ?


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 70
    Par défaut Exécution synchrone ou asynchrone ?
    Bonjour à tous,

    Mon programme contient plusieurs "modules" que l'utilisateur peut utiliser indépendamment grâce à un TabControl, contenant une TabPage pour chaque "module".

    Par exemple, un module pour faire une copie de fichiers en lot, un autre module pour convertir une liste de fichiers .csv en fichiers .dbf, un autre module qui renomme une liste de fichiers selon un pattern, etc.

    Dans mon module de conversion de fichiers .csv à .dbf, je me suis buté à une exception levée par le CLR, qui me dit que mon application principale n'a pas reçu de messages pour une trop longue période, puisqu'elle était trop occupée par la méthode qui fait la conversion (la conversion prend plus d'une minute dans la majorité des cas).

    J'ai donc décidé de déléguer le travail de cette méthode à un autre thread. J'ai utilisé la classe BackgroundWorker, qui fonctionne très bien. Je la notifie entre chaque fichier traité de mettre à jour une ProgressBar dans mon application principale.

    Le problème est que tout cela se fait de façon asynchrone, et donc, l'utilisateur peut cliquer un autre module et exécuter d'autres opérations. Je ne VEUX PAS ça. J'ai pensé à barrer tous les contrôles le temps que l'opération asynchrone se fasse, mais ça m'a amené à me questionner si je ne devrais pas utiliser un traitement normal, mais en m'assurant que mon application principale reçoit des messages pour éviter qu'une exception du CLR soit levée. (S'assurer de barrer tous les contrôles d'une application plus grosse et plus complexe au niveau interface pourrait être problématique).

    J'ai lu sur le thread-pool du CLR et sur une façon simple d'ajouter une méthode en tant que "work item" dans la queue. Cependant, je doute que je puisse notifier mon application principale du progrès de l'opération pour modifier l'état de ma ProgressBar.

    J'aurais besoin de suggestions !

    Merci d'avance !

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par cobolfingaz Voir le message
    J'ai lu sur le thread-pool du CLR et sur une façon simple d'ajouter une méthode en tant que "work item" dans la queue. Cependant, je doute que je puisse notifier mon application principale du progrès de l'opération pour modifier l'état de ma ProgressBar.
    Le BackgroundWorker utilise le pool de thread si je ne m'abuse. Si je me trompe il utilise de toute façon un thread (mais pas gérer par le pool) ce qui au final revient au même. La seule chose que tu doives faire, c'est empêcher toute interaction de l'utilisateur avec ton interface pendant le traitement.

    Un solution consisterait à d'afficher une fenêtre de progression en modal (une Form avec ProgressBar, BackgroundWorder et tout ce qu'il faut, que l'on affiche avec ShowDialog), afin d'empêcher toute interaction avec le reste de l'interface, et de la fermer une fois l'opération terminée.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 70
    Par défaut
    Bonne idée. Merci ! :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/03/2009, 11h05
  2. Socket java : synchrone ou asynchrone ?
    Par zenux dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 15/01/2008, 09h09
  3. Réponses: 3
    Dernier message: 14/01/2008, 11h21
  4. [C#] socket en mode synchrone et asynchrone
    Par Cyrill26 dans le forum Développement
    Réponses: 0
    Dernier message: 23/07/2007, 16h32
  5. Réponses: 4
    Dernier message: 09/05/2007, 10h04

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