IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

background worker-exception composante graphique est utilisé par un autre processus


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut background worker-exception composante graphique est utilisé par un autre processus
    salut
    j'ai essayé d'utiliser le background worker ,j'ai testé ceci pour un petit exemple et ça a marché mais pour un autre essai ca me génére une exception et je ne sais pas comment la corriger.
    en fait j'ai une fonction qui fait des traitement sql je l'ai mis dans le bg_dowork mais à un certain niveau elle me génére une exception me disant que la composante graphique est utilisé par un autre processus
    qu'est ce que je dois faire

    merci

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Sans code, le type de l'exception levée et autre détails intéressants, je dirais le colonel Moutarde, dans le salon, avec le chandelier. J'ai bon ?

    Sinon ça pourrait être aussi IllegalCrossThreadException, dans le thread non principal, avec une modification d'un contrôle graphique. C'est mieux peut être ?
    Pas de questions techniques par MP

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Private Sub travail()
            Dim cpt As Integer
            Dim x As New ArrayList
            Dim champ, type, ch, taille, measure As String
    
            x = GetTypeAndTailleAttributCoche()
    
            ch = ""
            measure = ""
    
            For cpt = 0 To x.Count - 3 Step 3
                champ = x.Item(cpt).ToString
                type = x.Item(cpt + 1).ToString
                taille = x.Item(cpt + 2).ToString
    
                If ch = "" Then
                    If taille = "" Then  'attribut qui n'a pa de taille max généralment pour type comme (int ,datetime...) A revoir 
                        ch = champ + " " + type
    
                    Else
                        ch = champ + " " + type + " " + taille   ' a revoir et a remplacer par la taille réelle ( decimal ????)
                    End If
                Else
                    If taille = "" Then
                        ch = ch + "," + champ + " " + type
                    Else
                        ch = ch + "," + champ + " " + type + " " + taille
                    End If
                End If
    
    
                If measure = "" Then
                    measure = champ
                Else
                    measure = measure + "," + champ
                End If
    
    
            Next
            objFait.SetConn(strConDefaut)
            'ajouter le test pour la verification si la table existe dans la base 
    
    
            If objFait.ExistTable(baseDefaut, "Fact" & TextBox2.Text) = True Then
                'MessageBox.Show("This Fact exists ,Please modify the name", "Fact", MessageBoxButtons.OK, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly, True)
                MsgBox("This Fact exists ,Please modify the name", MsgBoxStyle.OkOnly)
                TextBox2.Focus()
                
            Else
                objFait.CreateTableFait(TextBox2.Text, ch)
                Newid = objFait.GetLastIdFact + 1
                objFait.InsertIntoTableFact(Newid, TextBox2.Text & "_Key", measure, TextBox2.Text)
                Me.Hide()     Exception:Opération inter-threads non valide : le contrôle 'CréationFait' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
                frmInfoSchema.Show()
    
    
            End If
    
        End Sub
    
    
    
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    
            travail()
        End Sub

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Ok, donc c'est bien du domaine de l'IllegalCrossThreadException. Fait une recherche sur le forum à ce sujet, ça a été traité de nombreuses fois déjà (cf. méthode Invoke pour corriger le problème).
    Pas de questions techniques par MP

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    je n'ai pas vraiment trouver une solution à mon probléme , quelq'un peut m'aider plus !!

  6. #6
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,
    comme le dit le message d'erreur, tu ne peux pas accéder aux propriétés ni aux méthodes d'un objet graphique (contrôle ou fenêtre) à partir d'un thread différent de celui par lequel il a été créé. Donc ta méthode travail() doit être appelée par ce fameux thread, et pour ce faire le mieux est d'utiliser la métode Invoke() de ton formulaire (cf MSDN, recherche cette méthode pour les détails)

  7. #7
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    ça ce complique de plus en plus pour moi étant donné que c'est la premiere fois que j'utilise cette composante

  8. #8
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par gentelmand Voir le message
    ça ce complique de plus en plus pour moi étant donné que c'est la première fois que j'utilise cette composante
    As-tu fait l'effort de chercher au moins ? Je demande ça parce qu'en cherchant sur le forum avec backgrounderworker et invoke comme mots clés, tu trouves quelques résultats qui correspondent à ton problème tout de même ... et je ne parle même pas de Google (mais il faut connaitre un peu l'anglais car beaucoup de ressources sont en anglais).
    Pas de questions techniques par MP

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    Points : 128
    Points
    128
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    As-tu fait l'effort de chercher au moins ? Je demande ça parce qu'en cherchant sur le forum avec backgrounderworker et invoke comme mots clés, tu trouves quelques résultats qui correspondent à ton problème tout de même ... et je ne parle même pas de Google (mais il faut connaitre un peu l'anglais car beaucoup de ressources sont en anglais).
    j'ai fait des recherches mais ceci ne correspond à ce que je cherche , vu le code que j'ai mis , en plus je ne suis qu'à mes débuts avec le background worker

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/01/2014, 07h15
  2. Réponses: 6
    Dernier message: 25/05/2012, 20h56
  3. Réponses: 2
    Dernier message: 20/09/2010, 18h52
  4. Réponses: 22
    Dernier message: 02/10/2009, 10h31
  5. Réponses: 7
    Dernier message: 15/06/2007, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo