Cross thread operation not valid [Résolu]

Signaler
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
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
A voir également:

5 réponses

Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
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
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
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
Messages postés
329
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
10 mai 2014
4
RE

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

un tuto sur les délégué

@+LIM
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
je suis entrain de le lire