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 :

Gestion des Threads


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de sihammaster
    Webmaster
    Inscrit en
    Mai 2009
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Webmaster
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 256
    Par défaut Gestion des Threads
    Bonjour à toutes et à tous,

    j'aimerais utiliser les threads dans mon app et j'ai rencontré quelques difficultés,
    en fait j'ai plusieurs fonctions je voudrais lancer une par une, une fonction ne devrait pas se lancer si l'autre n'a pas terminé le traitement.
    voila ce que je fai jusqu'au moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Dim myThread As Thread
            myThread = New Thread(AddressOf fonction1)
            myThread .Start()
    je sais pas comment lancer plusieurs thread en respectant la fin de traitement d'une fonction
    Merci de votre aide.

  2. #2
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Ca doit être un truc de ce goût là :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim myThread As Thread
    myThread = New Thread(AddressOf fonction1)
    myThread .Start()
    myThread .Join()
    myThread = New Thread(AddressOf fonction2)
    myThread .Start()
    myThread .Join()
    myThread = New Thread(AddressOf fonction3)
    myThread .Start()

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Ca doit être un truc de ce goût là :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim myThread As Thread
    myThread = New Thread(AddressOf fonction1)
    myThread .Start()
    myThread .Join()
    myThread = New Thread(AddressOf fonction2)
    myThread .Start()
    myThread .Join()
    myThread = New Thread(AddressOf fonction3)
    myThread .Start()
    Euh... et c'est quoi l'intérêt d'utiliser des threads pour exécuter fonction1 et fonction2 alors ?

    Autant faire ça :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    fonction1()
    fonction2()
    Dim myThread As Thread
    myThread = New Thread(AddressOf fonction3)
    myThread .Start()

  4. #4
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Euh... et c'est quoi l'intérêt d'utiliser des threads pour exécuter fonction1 et fonction2 alors ?
    A ce compte là, autant faire :
    fonction1();
    fonction2();
    fonction3();

    je voudrais lancer une par une, une fonction ne devrait pas se lancer si l'autre n'a pas terminé le traitement
    On est bien d'accord que ça n'a aucun intéret en l'état, mais j'imagine que la problématique qui est derrière n'a pas été complètement expliquée.


    J'imagine qu'en vrai ça serait plutôt :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim myThread As Thread
    myThread = New Thread(AddressOf fonction1)
    myThread .Start()
    // do something 
    myThread .Join()
    myThread = New Thread(AddressOf fonction2)
    myThread .Start()
    // do something
    myThread .Join()
    myThread = New Thread(AddressOf fonction3)
    myThread .Start()

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Er3van Voir le message
    A ce compte là, autant faire :
    fonction1();
    fonction2();
    fonction3();
    Ben pas vraiment en fait... comme dans ton code tu n'avais pas mis de Join sur le dernier thread, j'ai laissé fonction3 dans un thread à part pour que ça s'exécute en background et qu'on attende pas la fin

  6. #6
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Ah oui en effet. Mea culpa.

  7. #7
    Membre éclairé Avatar de sihammaster
    Webmaster
    Inscrit en
    Mai 2009
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Webmaster
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 256
    Par défaut
    Merci à Vous,
    j'ai eu un probleme lors de l'execution de la premiere fonction, cette derniere serte à ouvrir des pages web dans des webbrowsers:
    dans la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WebBrowser1.Navigate("http://www.developpez.net/forums/d1059710/dotnet/langages/vb-net/gestion-threads/")
    Une exception non gérée du type 'System.Reflection.TargetInvocationException' s'est produite dans System.Windows.Forms.dll

    Informations supplémentaires*: Unable to get the window handle for the 'WebBrowser' control. Windowless ActiveX controls are not supported.
    Je sais pas d'ou vient le probleme, est-il declencher a cause de thread?
    Merci de m'aider.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    A priori tu as du accéder au contrôle WebBrowser avant qu'il ne soit initialisé... normalement le handle s'initialise automatiquement lors du premier accès, mais là tu y accèdes à partir d'un autre thread. Seul le thread principal a accès aux contrôles de l'interface utilisateur. Si ta fonction accède aux contrôles, elle doit s'exécuter dans le thread principal, pas dans un autre...

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    on peut reproduire l'erreur, (en français) :
    Impossible d'obtenir le handle de fenêtre pour le contrôle 'WebBrowser'. Les contrôles ActiveX sans fenêtre ne sont pas pris en charge.
    par exemple si on oublie, en cas de création dynamique du contrôle, de l'ajouter au formulaire :

Discussions similaires

  1. gestion des threads
    Par yanis97 dans le forum Langage
    Réponses: 6
    Dernier message: 20/04/2006, 13h41
  2. Gestion des Threads
    Par Nalfouille dans le forum MFC
    Réponses: 3
    Dernier message: 05/04/2006, 17h29
  3. Gestion des threads
    Par yanis97 dans le forum C++
    Réponses: 6
    Dernier message: 08/03/2006, 10h39
  4. GEstion des thread
    Par Julien Dufour dans le forum Access
    Réponses: 8
    Dernier message: 06/10/2004, 15h28
  5. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 10h40

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