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...
Version imprimable
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...
ALors en mettant le breakpoint sur main.invoke, puis en regardant ds watch, il me dit :
Ai je fait quelque chose de travers?Citation:
Invoke Name 'Invoke' is not declared.
Anax
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 :aie:
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 :
Dans la méthode DnsResolve, tu remplaces Main par theFormCode:
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 ...
Et quand tu crées l'objet DnsTask, tu lui passes Me en dernier paramètre.
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
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é...)
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
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