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

Windows Forms Discussion :

Thread, delegates : quelle différence ?


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Thread, delegates : quelle différence ?
    Bonjour,

    Je n'arrive pas bien à cerner la différence entre les threads, les delegates, la méthode Me.Invoke et Me.BeginInvoke....
    Je me perds un peu avec tous cela.

    Quelqu'un a-t'il la science infuse pour me l'expliquer ?

    D'avance merci beaucoup

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    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 156
    Points : 25 075
    Points
    25 075
    Par défaut
    un thread instancié via system.threading.thread permet de démarrer un nouveau processus à l'adresse d'une sub
    ca permet de ne pas bloquer l'interface utilisateur pendant des traitements long
    une fois la sub terminée, le thread s'arrete naturrelement (la sub peut en appeler d'autres)

    un délégué est un genre de pointeur de sub
    ca peut servir à de l'évènementiel, ca peut aussi servir à changer de thread

    explication du changement de thread:
    un thread autre que le thread principal n'a pas le droit de manipuler des objets graphiques des fenetres (sinon erreur)
    donc dans ce cas on passe par un délégué
    la classe control (rappel, form hérite de control) possède une propriété InvokeRequired qui permet de savoir s'il est nécessaire de changer de thread
    quand le processus qui appelle InvokeRequired est celui qui a créé le control ca retourne false (= pas besoin) si on est sur un autre thread ca va retourner true

    ici j'explique comment écrire une delegate sub
    http://www.developpez.net/forums/sho...21&postcount=9

    donc revenons à nos moutons, imaginons une sub qui va modifier la propriété texte d'un bouton et que cette sub pourra etre appelée par différentes sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private Delegate Sub DS_ModifierTexte
    private _Var_DS_ModifierTexte as new ModifierTexte(adressof ModifierTexte)
     
    public sub ModifierTexte()
        if me.invokerequired then
            me.invoke(_Var_DS_ModifierTexte)
        end if
     
        textbox1.text = ""
    end sub
    me étant la fenetre, si on vient d'un autre thread, invokerequired =true, donc on demande à me d'appeler sur son thread le délégué, qui pointe vers la meme sub, et donc on se retrouve au meme endroit, mais ce coup ci invokerequired est false donc ca tape le textbox




    pour ce qui est du begininvoke, ca fait la meme chose qu'invoke sauf que ca part sur un autre thread (géré par la classe qui propose begininvoke)
    donc ca n'attend pas que le traitement soit fini pour passer à la ligne d'après dans le code
    alors qu'invoke attend que l'invoke soit fini pour passer à la suite
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Bonsoir,

    Citation Envoyé par sperot51 Voir le message
    un thread instancié via system.threading.thread permet de démarrer un nouveau processus à l'adresse d'une sub
    Lorsque l'on créé un Thread on ne créé pas un nouveau processus. Ce thread appartiendra au processus qu'il a créé et uniquement celui la.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    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 156
    Points : 25 075
    Points
    25 075
    Par défaut
    Citation Envoyé par harz62 Voir le message
    Bonsoir,


    Lorsque l'on créé un Thread on ne créé pas un nouveau processus. Ce thread appartiendra au processus qu'il a créé et uniquement celui la.
    certes mais je me voyais mal expliquer que quand on créé un thread ca créé un thread

    il n'y a qu'un processus windows qui héberge plusieurs thread

    un nom en francais différent de "processus" ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 67
    Dernier message: 16/12/2007, 13h41
  2. [D2006] - C# ou Pascal Objet - Quelle différence
    Par RamDevTeam dans le forum Delphi .NET
    Réponses: 15
    Dernier message: 10/03/2006, 01h07
  3. [Outils][ADO.NET]Quelles différences DataSet/Hibernate ?
    Par kunfuka dans le forum EDI/Outils
    Réponses: 8
    Dernier message: 16/01/2006, 21h37
  4. [xsl][xslt][xslfo]quelles différences ?
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/01/2006, 13h16
  5. Quelle différence entre "réel simple" et "déc
    Par pyxosledisciple dans le forum Access
    Réponses: 2
    Dernier message: 11/01/2006, 11h51

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