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 :

[C#]Toujours et encore les threads . . .


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Par défaut [C#]Toujours et encore les threads . . .
    Bonjour ....
    Pour résumer je fais une appli client serveur (pc-pocket pc) avec les sockets.
    Lorsque du client je me connecte au serveur il y a un momment de latence très variable. Cela est du au fait que le pocket pc est relié en wifi etc ....
    Je trouve cela désagréable et je souhaite mettre une progressbar pour patienter .....

    C'est la que j'ai mon problème .... je veux la faire avancer parallèlement à la résolution de nom et à la connection au serveur .......



    Dans mon thread principal (Le form avec la progressbar) je lance tout d'abord un autre thread qui par l'intermédiaire d'un delegate va faire avancer ma progressbar, puis je lance la resolution de nom et la connection au serveur.

    Le problème c'est que mon second thread ne peut pas se servir du delegate car le premier thread est bloqué par la résolution de nom ... ma barre commence donc à avancer seulement après la connection (J'espère que je suis clair)



    J'ai par la suite essayé avec "Dns.BeginGetHostEntry" qui permet de ne pas me bloquer le premier thread .... cette fois ci mon problème vient du fait que lorsque je récupère le résultat dans ma fonction "AsyncCallback"
    je dois utiliser un champs de mon form (dans le premier thread) et donc il faudrait que je repasse par des delegate ..... bref je me mord la queue ...

    Si quelqu'un pouvait m'éclairer ....
    Merci




  2. #2
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Si tu veux changer de thread pour aller vers celui du form, tu as seulement a faire un invoke dessus ou encore un beginInvoke + endInvoke.

    Penche toi de ce coté

    Pk utiliser les sockets quand on peux utiliser le remoting qui est beaucoup mieux ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Par défaut
    Merci de ta réponse ...
    En ce qui concerne le remoting .... quelle est la différence avec les sockets .... a tu un lien vers un bon tuto ....

    Sinon pour le invoke, le problème c'est qu'il faut le lier à un delegate ... le code commence à s'éparpiller .... je ne trouve pas cela propre.

    Mon problème c'est que comme je le disais j'utilise un "Dns.BeginGetHostEntry", ce qui fait que le "Dns.EndGetHostEntry" est dans un thread différent. Or une fois la réponse recus je désire faire plusieurs actions (mettre ma progressbar en disable ... reactiver un bouton etc ...) , je me vois mal faire un invoke à chaque fois ....

    Merci de votre aide

  4. #4
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Regarde sur le net pour le remoting ... il y a plein de bon tuto

    Aussi, j'utilise ce booking à la job et il y est vraiment extra
    http://www.amazon.com/gp/product/159...lance&n=283155

    Le remoting est vraiment.. vraiment mieux que le sockets. LEs sockets ... c'est la vielle école et ce n'est plus du tout d'actualité pour les applications client/serveur depuis que le remoting est la!!
    C'est dure a apprendre et a bien controler au début mais un coup que c'est fait, c'est super facile a utiliser et a mettre en place.


    Si tu veux revenir a ton thread de form via un autre thread, il y a pas dautre solution que de faire un invoke.

  5. #5
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par shwin
    Pk utiliser les sockets quand on peux utiliser le remoting qui est beaucoup mieux ?
    ça dépend pourquoi faire .

    Pour l'appel de classe de façon transparente à travers un réseau, ok le remoting c'est bien (quoi que il y des pb de perfs ) mais pour transferer des données brute (genre un fichier de 50 Mo) je le déconseil. Les sockets sont la pour ça .

    Sinon pour ton pb de thread, tu te compliques la vie.

    Tu vais un Dns.BeginGetHostEntry et juste après tu fait un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    private bool end = false;
    public MaMethod()
    {
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dns.BeginGetHostEntry();
          while(end == false)
          {
               Le traitement d'attente comme par exemple augmenter la barre de progression (attention au max )
               Thread.Sleep(10); //Pour ralentir la boucle
          }
    }
    
    private void AsyncCallBack(....)
    {
         ///traitement
         end = true;
    }
    
    C'est pas le plus propre de toutes les possibilités mais c'est simple et ça marche .(enfin je crois )

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Par défaut
    Merci beaucoup de vos réponses !

    Dev01 .... ça marche et plus c'est super simple ! merci

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

Discussions similaires

  1. boost, la serialization et les threads (encore)
    Par nemodev dans le forum Boost
    Réponses: 5
    Dernier message: 12/03/2010, 15h29
  2. toujours et encore les boundingboxs de directx
    Par batosai dans le forum DirectX
    Réponses: 9
    Dernier message: 23/06/2004, 11h22
  3. Question simple sur les threads :)
    Par momox dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/06/2003, 04h13
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59

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