Bonjour,

J'essai de faire un operation multithreads pour accelerer mes opérations dans un environnement non bloquante.

Lors de l'ouverture du formulaire je créer un dataset avec une table "Echantillon", ensuite je démarre plusieurs thread qui me permettent d'analyser mon échantillon.

Le code aurait besoin d'amélioration et j'apprécierais vos suggestions

car j'ai plusieurs messages d'erreurs qui se manifestent ici et la

il y a en autre
La collection a été modifiée*; l'opération d'énumération peut ne pas s'exécuter.

La référence d'objet n'est pas définie à une instance d'un objet.

DataTable appartient déjà à ce DataSet.

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
Private Sub DemarrerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DemarrerToolStripMenuItem.Click
        For i = 0 To 5
            Dim T As New Threading.Thread(AddressOf DoTheTask)
            T.Name = "Threads#" & i.ToString
            T.Start()
        Next
    End Sub
Sub DoTheTask()
        'boucle pour modifier les critères d'analyses 
        Do Until QuSymbole.Count = 0
            Dim Symb As String = QuSymbole.Dequeue
            Dim Expression As String = "Symbole='" & Symb & "'"
            Dim FoundRow() As DataRow
            FoundRow = ODTEchantillon.Select(Expression)
            ODTDonnee = New DataTable("" & Symb & "")
            'Importation des lignes de l'expresssion
            For Each r As DataRow In FoundRow
                Try
                    If Not IsDBNull(r) Then
                        ODTDonnee.ImportRow(r)
                    End If
                Catch ex As Exception
                    'Si erreur ajoute à la queue le symb non executé
                    Console.WriteLine(Symb & " Message erreur " & ex.Message)
                    QuSymbole.Enqueue(Symb)
                End Try
            Next
            ObjDataSet.Tables.Add(ODTDonnee)
            Console.WriteLine(ObjDataSet.Tables.Count.ToString)
            Console.WriteLine("Le thread {0} execute le symbole {1} dans le datatable {2} avec {3} données dedans", Thread.CurrentThread.Name, Symb, ODTDonnee.TableName, ODTDonnee.Rows.Count.ToString)
            ODTDonnee.Clear()
            ODTDonnee = Nothing
        Loop
        Console.WriteLine(ObjDataSet.Tables.Count.ToString)
    End Sub
merci de votre aide