Mise à jour d'un label sous thread ! [Résolu]

Zmain09 112 Messages postés lundi 17 septembre 2012Date d'inscription 11 juin 2016 Dernière intervention - 7 juin 2016 à 14:14 - Dernière réponse : Zmain09 112 Messages postés lundi 17 septembre 2012Date d'inscription 11 juin 2016 Dernière intervention
- 7 juin 2016 à 23:06
Bonjour à tous,

j'ai un petit problème dans mon code vb je vous explique :

J'ai 2 form !

- Une principale
- Une notification

Comme la notification peut et même doit s'afficher très souvent et rapidement, le mieux pour moi est de l'ouvrir depuis un thread !


Voila un exemple de comment je procède !


Public Sub OuvrirNotif()

Dim t1 As New Thread(AddressOf Notification1)
t1.Start()

End Sub

Public Sub Notification1()

Dim id as String = GetId() ' Comment l'utiliser ?

notif = New Notif1() ' Notif1 ; form déjà créer
Application.Run(notif)

End Sub



Ma form et déjà créer !
Je ne la créer pas manuellement, avec un truc du style :
notif.control.add(label0)
notif.control.add(pic1)
notif.control.add(pic2)
notif.control.add(...)

bref vous avez compris !



Seulement dans cette form j'ai un label qui a chaque fois que la form notif s'ouvre, se label doivent avoir des textes qui leurs correspondes, d'où la déclaration "id" du sub "Notification1()"

Faudra faire peut être un truc comme ceci :


Public Sub Notification1()

Dim id as String = GetId() ' Comment l'utiliser ?

notif = New Notif1()
notif.label1.Text = "id : " & id ' Mais ne fonctionne pas, d’ailleurs c'est complètement logique....

Application.Run(notif)

End Sub


Sinon par invoque ? Mais j'arrive pas a récupérer si vous voulais le label de la form ouverte par thread !


Voila si quelqu'un peut m'aider.. :)
Je vous remercie d'avance.


Valentin
Afficher la suite 

7 réponses

Répondre au sujet
NHenry 14051 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 7 février 2018 Dernière intervention - 7 juin 2016 à 18:51
0
Utile
3
Tout est dans la doc : "msdn vb.net thread update form"
https://msdn.microsoft.com/en-us/library/ms171728(v=vs.110).aspx
Zmain09 112 Messages postés lundi 17 septembre 2012Date d'inscription 11 juin 2016 Dernière intervention - 7 juin 2016 à 19:18
Heu, j'ai déjà vue cette page, et dans mon cas le label et déjà déclarer vue qu'il est déjà dans la form..

donc je peut pas utiliser sa.. par exemple :

If Me.textBox1.InvokeRequired Then


Ne marchera pas vue que j'ai pas sa déclaration au dessus :

Private textBox1 As TextBox


Vue que ma form et déjà tout prête.

Et puis c'est une 2nd form c'est pas la principale,
J’exécute mes fonctions.. depuis la 1ere la principale.



Enfin peut être que y a la réponse dans la doc et que j'ai rater des éléments.. je cherche toujours !
NHenry 14051 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 7 février 2018 Dernière intervention - 7 juin 2016 à 19:35
As-tu essayé d'utiliser la propriété InvokeRequired et Invoke à partir d'un autre control/form ?
Zmain09 112 Messages postés lundi 17 septembre 2012Date d'inscription 11 juin 2016 Dernière intervention - 7 juin 2016 à 22:37
Je voit pas comment tu veut dire !
Commenter la réponse de NHenry
Whismeril 10999 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 8 février 2018 Dernière intervention - Modifié par Whismeril le 7/06/2016 à 19:28
0
Utile
1
Bonsoir

j'ai relu plusieurs fois ton message et je ne comprends pas ce que tu veux.

Déjà, tu dis par deux fois
Ma form et déjà créer !

mais dans ton code il y a cette ligne
notif = New Notif1()
qui crée une nouvelle instance et donc va à l'encontre de ce que tu dis.

Par contre tu écris ça aussi

Je ne la créer pas manuellement, avec un truc du style :
notif.control.add(label0)
notif.control.add(pic1)
notif.control.add(pic2)
notif.control.add(...)

Veux tu dire que tu as édité l'aspect de ta Form avec l'éditeur?
Comme 99,9999999999999% des Form?
Si oui ton insistance sur un fait qui coule de source, embrouille plutôt en distillant un doute là oú le fait de ne pas en parler n'en aurait pas mis.


Y'a un ID dont même toi tu ne sais pas ce qu'il fait là, comment veux tu qu'on saches à ta place?

Et j'adore ce commentaire
' Mais ne fonctionne pas, d’ailleurs c'est complètement logique...
si tu le dis....

Peux tu décrire précisément ton besoin? Et non pas la solution que tu as choisie (que d'ailleurs tu ne n'arrives pas à décrire).

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Zmain09 112 Messages postés lundi 17 septembre 2012Date d'inscription 11 juin 2016 Dernière intervention - 7 juin 2016 à 22:36
Salut oui je comprend se que tu veut dire, j’étais un peut fatiguer quand j'ai poster mon problème ^^

Oui le coms.. je me comprend, c'est parce que je sais pourquoi sa marche pas mais je sais pas le corrigé..


Bref, pour résumer : Je veut ouvrir sous thread une "fenêtre" faites avec l'éditeur, ainsi que modifier texte d'un label de cette "fenêtre".

Comment je pourrai faire !
Commenter la réponse de Whismeril
Zmain09 112 Messages postés lundi 17 septembre 2012Date d'inscription 11 juin 2016 Dernière intervention - 7 juin 2016 à 23:06
0
Utile
Sujet résolu...

Voila le code :


Dim t As Thread
t = New Thread(Sub()
Using frm As New Notif1
frm.Label4.Text = "............."
Application.Run(frm)
End Using
End Sub)
t.Start()
Commenter la réponse de Zmain09

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.