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
Partager