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 :
Citation:
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 :
Citation:
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:
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