Cross thread operation not valid [Résolu]

cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 7 déc. 2011 à 19:46 - Dernière réponse : cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention
- 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
cs_lim 329 Messages postés jeudi 20 novembre 2003Date d'inscription 10 mai 2014 Dernière intervention - 8 déc. 2011 à 08:36
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de cs_lim
Meilleure réponse
cs_lim 329 Messages postés jeudi 20 novembre 2003Date d'inscription 10 mai 2014 Dernière intervention - 8 déc. 2011 à 11:36
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de cs_lim
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 8 déc. 2011 à 11:07
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
cs_lim 329 Messages postés jeudi 20 novembre 2003Date d'inscription 10 mai 2014 Dernière intervention - 8 déc. 2011 à 11:39
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
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 8 déc. 2011 à 11:53
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.