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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    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
    Membre expérimenté
    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 : 47
    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
    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 ?

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    446
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 446
    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
    Membre expérimenté
    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 : 47
    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
    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).

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

  6. #6
    Membre chevronné 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
    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)

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