Bonjour à tous!

J'aimerais que le chargement du contenu des tables d'une base de données se fasse dans un Thread séparé. Pour cela, j'ai créé une classe qui hérite du composant BackgroundWorker. J'y ai une Sub "DoWork", une autre "RunWorkerCompleted". (Je me permets de les coller ci-dessous.)
Malgré que, dans le DoWork, la propriété « e.Result » soit bien affectée (elle prend une DataTable en valeur), je ne parviens pas à la récupérer dans le RunWorkerCompleted. Le paramètre « RunWorkerCompletedEventArgs » de cette Sub génère une « InnerException » dont la valeur est Nothing. Comment se fait-il ?
Quelqu’un sait-il m’aider ?
D’avance, merci beaucoup !

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
 
 
    ''' <summary>
    ''' Exécute le DoWord selon la table demandée
    ''' </summary>
 
    Friend Sub RunDoWork()
        AddHandler MyBase.RunWorkerCompleted, AddressOf LoadListThread_RunWorkerCompleted
        Select Case cTable
            Case Is = "Auteurs"
                AddHandler MyBase.DoWork, AddressOf GetListAuteurs_DoWork
                Dim oDt As New DataTable
                Dim oArg As New DoWorkEventArgs(oDt)
                MyBase.OnDoWork(oArg)
 
        End Select
    End Sub
 
    ''' <summary>
    ''' Tâche d'arrière plan: Obtient la liste des auteurs
    ''' </summary>
 
    Private Sub GetListAuteurs_DoWork(ByVal sender As System.Object, ByVal e As DoWorkEventArgs)
        Dim ClassAccesAuteurs As New ClassAccesAuxDonnees.TableAuteurs
        Dim dtLstAuteurs As DataTable = ClassAccesAuteurs.SelectAll
        e.Result = CType(dtLstAuteurs, Object)
        Dim ex As New Exception()
        Dim oRunWorkerCompletedEventArgs As New RunWorkerCompletedEventArgs(e.Result, ex, False)
        MyBase.OnRunWorkerCompleted(oRunWorkerCompletedEventArgs)
    End Sub
 
    Private Sub LoadListThread_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
        If e.Error Is Nothing Then
            If e.Result IsNot Nothing Then
                Dim dataResult As DataTable = TryCast(e.Result, DataTable)
                If dataResult.Rows.Count = 0 Then
                    Select Case cTable
                        Case Is = "Auteurs"
                            MsgBox("Pas d'auteurs dans la base de données !", MsgBoxStyle.Exclamation, My.Settings.pAppEnteteBox)
                    End Select
                Else
                    oListBoxThread.DataSource = dataResult
                End If
            End If
        Else
            MsgBox(e.Error.Message, MsgBoxStyle.Exclamation, My.Settings.pAppEnteteBox)
        End If
    End Sub