Pour exemple, prenons un objet simple et une classe qui permet d'en faire des listes. Dans cette classe j'ajoute un sub simple qui permet d'ajouter un objet à la liste à partir d'un string (j'ai simplifié la manip que je fais avec un simple tolower).
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
Class MyCustomObject
    Public Prop1 As String
    Public Prop2 As String
End Class
 
Class MyCustomObjectList
    Inherits List(Of MyCustomObject)
 
    Public Sub AddFromString(ByVal StringToAdd As String)
        Dim Temp_Obj As New MyCustomObject
        Temp_Obj.Prop1 = StringToAdd
        Temp_Obj.Prop2 = StringToAdd.ToLower
        Me.Add(Temp_Obj)
    End Sub
 
End Class
Je déclare une nouvelle variable au début de mon application :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Dim MyCustomList As New MyCustomObjectList
Aucun problème lorsque je fais des add(object) ou des AddFromString(string) depuis le thread principal, mais si je lance un thread secondaire AddFromString(string) ne fonctionne pas, j'ai l'erreur :
La référence d'objet n'est pas définie à une instance d'un objet.
J'ai bien compris que le debugger me reproche de ne pas avoir instancié ma variable dans le thread ou je l'utilise. Pourtant les autres méthode (add, contains etc...) fonctionnent, et des variables comme string() déclarées dans le thread principal fonctionnent parfaitement dans le thread secondaire...

La question est donc, comment fait-on?