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 :

[VB.Net][Threading] Problème de parent ...


Sujet :

Windows Forms

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut [VB.Net][Threading] Problème de parent ...
    Bonjour,

    Avec la manip que je veux faire j'obtiens le message d'erreur suivant :

    Les contrôles créés sur un thread ne peuvent pas être parents d'un contrôle d'un autre thread.


    Ce que je veux faire :

    J'ai mon IHM principale à partir de laquelle l'utilisateur lance différents traitements ou effectue ses opérations. Il se trouve que parfois dans la couche métier, certains opérations prennent du temps car il faut aller charger du paramétrage mais uniquement la première fois.

    Ce que je voudrais c'est que le metier par un système d'évènement puisse communiquer "Attention, je charge du paramétrage donc sois patient".


    Ce que j'ai fait :

    J'ai crée une IHM qui s'abonne à des events Shared d'une classe technique de très bas niveaux qui est elle même référence dans le metier. Un event lance la tache, un autre défini l'avancement et le dernier arrête.

    Ca marche nickel, mon IHM capture les events créent des controls dans l'IHM pour obtenir quelque chose proche de FireFox pour les téléchargements ....

    Le seul problème c'est que l'IHM se raffraîchit pas car elle bloqué par le traitement en cours. Comme je ne peux pas Threader ce genre de chargement, je me suis dit :" tiens, c'est la fenêtre que je vais mettre dans un Thread".

    Et c'est que je prends le pain décrit plus ...

    Le code du lancement du Thread est le suivant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim _obThread As New System.Threading.Thread(AddressOf lancerFenetre)
     
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            _obThread.Start()
    End Sub
     
    Private Sub sPri_LancerFenetre()
            Me._frm = New FSuivi()
     
            Me._frm.Show
    End Sub
    Ps : Joyeux Noël !

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    Bonne année !

    J'ai essayé pas de mal de combinaisons et j'ai toujours le même souci ...

    La dernière en date est que la fenêtre est complètement crée en dehors du Thread mais ... pas mieux !!!

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Par défaut
    Tous les contrôles et les fenêtres de l'IHM doivent être crées dans le même thread. Si un traitement long bloque ce thread il n'y a plus de réaction aux clics ou autres.
    Le moyen le plus efficace est d'effectuer le traitement dans un thread séparé et de notifier l'avancement à l'ihm par événement. Attention, le handler de cet événement est appelé dans le thread de traitement, il faut donc utiliser Control.Invoke pour mettre à jour l'affichage d'un ProgressBar.

    Il est aussi possible de conserver le traitement dans le thread principal et d'actualiser le ProgressBar directement dans le code du traitement : plus de thread, plus de pb d'Invoke : c'est plus simple mais l'ihm reste bloquée durant le traitement.

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 285
    Par défaut
    Hello !

    Merci, j'ai utilisé + ou - la méthode proposée et çà fonctionne !

    Merci encore !

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

Discussions similaires

  1. [VB.NET] [CR] Probléme avec Crystal Report.
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/03/2005, 14h18
  2. [VB.NET] [Débutant] Probléme de variable dans les requettes
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 13h13
  3. [VB.NET] Thread
    Par nico-pyright(c) dans le forum ASP.NET
    Réponses: 5
    Dernier message: 03/11/2004, 18h32
  4. [VB.NET] Threads et paramètres
    Par moufles03 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/10/2004, 17h36
  5. [.NET][GLUT] problème avec iostream
    Par polonain2 dans le forum OpenGL
    Réponses: 7
    Dernier message: 17/03/2004, 17h24

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