Cross thread operation not valid [Résolu]

Messages postés
3244
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
13 décembre 2018
- - Dernière réponse : cs_ShayW
Messages postés
3244
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
13 décembre 2018
- 8 déc. 2011 à 11:53
Bonjour à tous

J'utilise le backgroundWorker
Private Sub backgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles backgroundWorker1.DoWork
  sub1()
  sub2()
        Try
            Buttonsolution.Enabled = True
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
 End Sub


une exception a été relevé

cross thread operation invalid:control
"buttonsolution" accessed from a thread other
than the thread it was created on


Merci
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Dernière intervention
10 mai 2014
3
Merci
Salut

Ta form est un Thread, ton BackgroundWorker est un autre Thread, il ne peut pas accéder aux objets de ta form.

Solution : déclaration d'un délégué qui va permettre l'interaction entre les Threads.

La fonction pour mettre à true ton bouton
Public Function MettreTrueBouton() as Boolean
    Buttonsolution.Enabled = True
    Return True
End Function



Déclaration du délégué
Le délégué doit avoir les mêmes arguments et le même type de retour que la fonction qu'il délègue.
Delegate Function Delegate_MettreTrueBouton() as Boolean

Déclaration de l'instance du délégué
Public Instance_MettreTrueBouton as TAFORM.Delegate_MettreTrueBouton = New Delegate_MettreTrueBouton(AddressOf Me.MettreTrueBouton)


Dans ton BackGroundWorker à la place de button.enabled=true mettre
Me.Invoke(Instance_MettreTrueBouton)


Une fois tout ceci fait ton backgroundworker pourra interagir avec le bouton de ta form.


@+LIM

Merci cs_lim 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 103 internautes ce mois-ci

Commenter la réponse de cs_lim
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Dernière intervention
10 mai 2014
3
Merci
Re

Pour la définition d'un Delegate :

http://www.developerfusion.com/article/5251/delegates-in-vbnet/

A delegate can be defined as a type safe function pointer. It encapsulates the memory address of a function in your code. Whenever you create or use an event in code, you are using a delegate. When the event is thrown, the framework examines the delegate behind the event and then calls the function that the delegate points to. As we will see later, delegates can be combined to form groups of functions that can be called together.


je te laisse traduire

@+LIM

Merci cs_lim 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 103 internautes ce mois-ci

Commenter la réponse de cs_lim
Messages postés
3244
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
13 décembre 2018
0
Merci
Bonjour Lim

j'ai déclaré tout en private cela fonctionne aussi
si je comprends
Delegate Function Delegate_MettreTrueBouton() as Boolean

est un pointer de l'addresse de la fonction
MettreTrueBouton()
ce qui va permettre à un autre thread d'y acceder
Commenter la réponse de cs_ShayW
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Dernière intervention
10 mai 2014
0
Merci
RE

toujours en anglais : http://msdn.microsoft.com/en-us/library/Aa288459

un tuto sur les délégué

@+LIM
Commenter la réponse de cs_lim
Messages postés
3244
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
13 décembre 2018
0
Merci
je suis entrain de le lire
Commenter la réponse de cs_ShayW

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.