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 :

Transposition en thread [Fait]


Sujet :

Windows Forms

  1. #21
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Je soupçonne un truc, mais je suis pas sûr... essaie de mettre un breakpoint sur Main.Invoke, et regarde la valeur de Main.Visible. Quelque chose me dit que c'est False, ce qui voudrait dire que ça fait référence à une autre instance de la Form...

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 127
    Points : 61
    Points
    61
    Par défaut
    ALors en mettant le breakpoint sur main.invoke, puis en regardant ds watch, il me dit :
    Invoke Name 'Invoke' is not declared.
    Ai je fait quelque chose de travers?

    Anax

  3. #23
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    C'est pas Invoke qu'il faut regarder dans watch (c'est une méthode, pas une propriété...), mais Visible. L'idée était de voir si Main faisait référence à la Form déjà ouverte, ou à une nouvelle.

    Bon, j'ai fait un test vite fait : si tu es dans le même thread, Main fait référence à la Form déjà ouverte, mais si tu es dans un autre thread, c'est une autre instance de Main
    Voilà qui confirme mon opinion sur le fait d'utiliser le nom de la classe comme si c'était une variable (cf. ma remarque dans le message de 21h39)... ça a des effets de bord difficilement prévisibles.

    Donc, j'en reviens à ce que je disais : il faut passer à la classe DnsTask une référence vers la Form. Tu peux ajouter un champ de type Form dans la classe, et ajouter un paramètre au constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
     
    Private theForm As Form
     
    Public Sub New(ByVal hostname As String, ByVal ip As String, ByVal lvi As ListViewItem, ByVal f As Form)
            Host_Name = hostname
            Host_IP = ip
            Me.ResultLvi = lvi
            Me.theForm = f
        End Sub
    ...
    Dans la méthode DnsResolve, tu remplaces Main par theForm

    Et quand tu crées l'objet DnsTask, tu lui passes Me en dernier paramètre.

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 127
    Points : 61
    Points
    61
    Par défaut
    Juste une petite question par rapport a ton threadPool, comment savoir s'il reste des actions ds le pool ou si le pool est vide?
    En fait je voudrais realiser à la suite de cela la progressbar. De ce fait, je pense qu'il faut que je sache conbien d'actions sont lancés en totalité vers le nombre d'actions restantes. A moins que tu puisses me donner une piste de recherche.
    J'ai cherché hier soir un peu mais tous ce que je trouve fonctionne avec un backgroundworker

    Merci d'avance

    Anax

  5. #25
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Apparemment le ThreadPool ne peut pas indiquer combien de tâches sont en cours
    Par contre tu peux maintenir une liste d'objets DnsTask, et vérifier si DnsResult et ReverseDnsResult sont renseignés... ça t'indiquera si la tâche a été traitée. Ou alors tu peux ajouter à DnsTask une propriété qui indique son état (pas traitée, traitement en cours, traitement terminé...)

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 127
    Points : 61
    Points
    61
    Par défaut
    Ok je comprends. Est ce que ceci est envisageable :

    Dans mon form principal, je maintiens une variable avec le nombre de ligne du listview. Sachant qu'un thread = une ligne. J’ai le nombre total de thread qui vont être lancé.
    Je place ce chiffre ds un textbox qui se trouve ds mon form principal.
    Via le Invoke, je viens décrémenter ce chiffre avec une formule du style : matextbox = matextbox – 1. Ceci nous donnera un nombre décroissant.
    Par ailleurs, je rends ma textbox invisible.
    Par contre je pense que je suis obligé de placer tout cela dans mon form principal ou alors est il possible de placer cela ds un autre form (genre fenêtre indiquant qu’on est en cours de traitement) ?

    Merci encore pour tes reponses

    Anax

  7. #27
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 127
    Points : 61
    Points
    61
    Par défaut
    Ok Tomlev, merci bcp pour toutes ces infos
    Ca marche impec et j'ai reussi à me débrouiller pour le reste.

    Merci encore pour toutes ces réponses

    Anax

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  3. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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