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

VB.NET Discussion :

Erreur avec l'utilisation BackgroundWorker


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut Erreur avec l'utilisation BackgroundWorker
    Bonjour à tous,

    J'essaye d’utiliser l'outil BackgroundWorker1 mais je rencontre les erreurs suivantes :

    Pour le contrôle : Openfile dialogue :
    Une exception de type 'System.Threading.ThreadStateException' s'est produite dans System.Windows.Forms.dll mais n'a pas été gérée dans le code utilisateur

    Le thread actuel doit être en mode STA (Single Thread Apartment) avant que des appels OLE puissent être effectués. Assurez-vous que votre fonction Main est marquée comme STAThreadAttribute. Cette exception n'est déclenchée que si un débogueur est attaché au processus.
    Pour le contrôle datagridview :
    Une exception de type 'System.InvalidOperationException' s'est produite dans System.Windows.Forms.dll mais n'a pas été gérée dans le code utilisateur

    Informations supplémentaires : Opération inter-threads non valide : le contrôle 'DataGridView1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.


    Tout cela avec ce bout de code qui charge un fichier texte avec deux colonnes séparées par ":"

    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
    Private Sub BackgroundWorker1_DoWork(sender As Object, e As ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
     
            Try
     
                Dim Separator = ToolStripTextBox1.Text
     
                Dim filename As String
     
                OpenFileDialog1.ShowDialog()
     
                filename = OpenFileDialog1.FileName
                Dim sr As New IO.StreamReader("C:\Users\PC- TOSHIBA\Desktop\TEST.txt")
     
                Dim dt As New DataTable
     
                Dim newline() As String = sr.ReadLine.Split(Separator)
     
     
                dt.Columns.AddRange({New DataColumn("Identifiant"), New DataColumn("REF"), New DataColumn("Fournisseur")})
     
                While (Not sr.EndOfStream)
     
                    newline = sr.ReadLine.Split(Separator)
     
     
     
                    Dim newrow As DataRow = dt.NewRow
                    Try
                        Dim Fournisseur() As String = Split(newline(0), "@")
     
                        newrow.ItemArray = {newline(0), newline(1), Fournisseur(1)}
     
                        dt.Rows.Add(newrow)
     
                    Catch ex As Exception
                    End Try
     
     
                End While
     
     
                DataGridView1.DataSource = dt
     
     
            Catch ex As Exception
                'MsgBox("Une erreur a été levée, vérifier que le fichier soit au bon format : 2 colonnes---> [mail : réf], le séparateur est modifiable dans le menu")
                Exit Sub
     
            End Try
     
            Label1.Text = "Enregistements :  " & DataGridView1.RowCount
     
     
        End Sub


    Merci pour votre aide

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    le backgroundworker permet de travailler sur un autre thread, et de ne pas figer l'interface
    depuis un autre thread il est interdit de modifier l'interface utilisateur

    donc set du datasource interdit
    openifiledialog.showdialog surement interdit aussi

    il faut donc que tu demandes le fichier avant le dowork, et que tu set le datasource après le dowork (il est possible de passer quelque chose dans e.Result et de le retrouver dans l'event Completed)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut
    Pol63 Merci pour ta réponse,

    C'est très clair.

    Je vais tester ça !

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/05/2008, 18h35
  2. Réponses: 3
    Dernier message: 26/06/2007, 13h50
  3. Erreur: avec l'utilisation de template<int N>
    Par vincho dans le forum C++
    Réponses: 8
    Dernier message: 22/02/2007, 20h07
  4. Erreur avec GetImageSize : utilisation d'une URL
    Par Are-no dans le forum Langage
    Réponses: 4
    Dernier message: 15/02/2007, 00h41
  5. Retour d'erreur avec l'utilisation de la commande For en VBS
    Par genialk2000 dans le forum VBScript
    Réponses: 3
    Dernier message: 30/03/2005, 19h45

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