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 :

Backgroundworker -> création dynamique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut Backgroundworker -> création dynamique
    Bonjour,

    j'aimerais créé des backgroundworker suivant un nombre entré par l'utilisateur, par exemple 5 ->

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i de 0 à 5
    backgroundworker bla'i' = new backgroundworker();
    Déjà, comment vraiment l'écrire avec des noms distincts et identifiables ? (avec le i dans le nom)
    Et ensuite, où écrire les fonctions que va faire ce backgroundworker du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Traitement1();Traitement2();This.bla1.CancelAsync();
    Suffit t'il de faire bla1.runworkerasync(); suivi de bla1.traitement(); etc ?

    Je ne comprends pas trop pour le moment ..

    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour benobab,

    En fait, en ce qui concerne le nommage avec une variable utilisateur, c'est la même problématique que celle que tu nous avais soumis ici.
    Avec une List<BackgroundWorker> cela devrait tout à fait répondre à ton attente.

    Après, je ne vois pas trop où tu veux aller avec... Il faudrait que ce soit des traitements prédéfinis que l'utilisateur peut sélectionner peut-être?

  3. #3
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut
    Ok en effet je vais faire par liste dans ce cas.
    Et en fait ce que je veux c'est que ces backgroundworker fasse tous le même traitement -> traitement (); car ils n'iront pas à la même vitesse, donc il faut qu'ils soient en thread séparé.

    En fait je peux peut être faire une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void traitement (backgroundworker b) {
     
     //ICI je mettrais le code à exécuter pour chaques backgroundworker ? }

  4. #4
    Invité
    Invité(e)
    Par défaut
    Inutile que je te dises que j'aurais utilisé un objet "Task" à ta place... mais c'est toi qui vois... Tu l'aimes ton BackgroundWorker hein?

    Cela dit effectivement tu peux faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void traitement (BackgroundWorker bgw, DoWorkEventArgs evt)
    {
       //Le code du backgroundworker
     
       //on peut faire éventuellement : 
       if (bgw.CancellationPending)
       {
         evt.Cancel=true;
         return;
       }
    }
    avec comme exemple d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    List<BackgroundWorker> workers = new List<BackgroundWorker>();
    for(int i=0 ; i<nbWorkersGivenByUser ; i++)
    {
       BackgroundWorker newWorker = new BackgroundWorker() {WorkerSupportsCancellation = true};
       newWorker.DoWork+=(snd,evt)=> traitement((BackgroundWorker)snd, evt);
       workers.Add(newWorker);
    }

  5. #5
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut
    C'est Top !

    Oui en effet, j'y tiens, tout simplement car c'est le seul composant multi-thread que je connais à peu prêt (il me reste peu de temps pour coder mon appli, et je n'avais jamais codé avant celà !!).

    Merci beaucoup de tes réponses, ça me fais bien avancer à chaque fois !

  6. #6
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut
    Citation Envoyé par Ph_Gr Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    List<BackgroundWorker> workers = new List<BackgroundWorker>();
    for(int i=0 ; i<nbWorkersGivenByUser ; i++)
    {
       BackgroundWorker newWorker = new BackgroundWorker() {WorkerSupportsCancellation = true};
       newWorker.DoWork+=(snd,evt)=> traitement((BackgroundWorker)snd, evt);
       workers.Add(newWorker);
    }
    Malheureusement, je ne passe pas dans la fonction traitement, en faisant un copier/coller de ton code, j'ai juste rajouter un troisième argument dans traitement, qui est i, et je l'ai également rajouter dans le prototype etc etc .. Aurais-tu une idée du pourquoi du comment ? ..

    Correction : J'avais juste oublié le RunWorkerAsync(); désolé .

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

Discussions similaires

  1. Création dynamique TADOConnection
    Par chaours dans le forum Bases de données
    Réponses: 6
    Dernier message: 19/04/2004, 10h54
  2. [D7] Création dynamique de Form
    Par jer64 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/08/2003, 12h20
  3. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07
  4. TWebBrowser et création dynamique
    Par BakaOnigiri dans le forum Web & réseau
    Réponses: 2
    Dernier message: 01/09/2002, 10h53
  5. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36

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