Bonjour a tous,

me revoilà à la charge pour un problème de thread cette fois-ci.
Je rappel le but de mon application : sauvegarder sur fichier .txt les données reçues d'un inclinomètre et d'un GPS.
Pour lire en continu les information du GPS et de l'inclinomètre j'ai créé deux threads.

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
 
Private Sub GPSLogging()
        With SerialPort2
            .PortName = PortNameGPS
            .BaudRate = 4800
            .DataBits = 8
            .Parity = Parity.None
            .StopBits = StopBits.One
            .Open()
        End With
        TacheGPS = New Thread(New ThreadStart(AddressOf ReadGPS))
        TacheGPS.Start()
    End Sub
 
Private Sub ReadGPS()
        Dim Buffer As Byte
        Dim Tampon As String = ""
        Dim Line As GPSLine
        Do
            Buffer = SerialPort2.ReadByte
            If Not (Buffer = 13) Then
                Tampon = Tampon & Chr(Buffer)
            Else
                If ((StrComp(Strings.Mid(Tampon, 2, 6), "$GPRMC")) = 0) Then
                    Line = ExtractValueGPS(Tampon)
                    Me.GPSSetDataGrid(Line)
                    WriteOnFileGPS(FileNameGPS, Line)
                    If ElpsdSeconds < 59 Then
                        ElpsdSeconds = ElpsdSeconds + 1
                    Else
                        ElpsdMinutes = ElpsdMinutes + 1
                        ElpsdSeconds = 0
                    End If
                    Tampon = ""
                Else
                    Tampon = ""
                End If
 
            End If
        Loop
 
End Sub
"Même chose pour l'inclinomètre.

Je démarre ces threads lorsque je click sur un bouton et les arrête en cliquant sur un autre (comme de par hazard !!).

Mon problème est que lorsque je veux arreter les threads de cette manière :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Private Sub StopLoggingToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles StopLoggingToolStripMenuItem.Click, TSStopLog.Click
 
        TacheInclino.Abort()
        TacheGPS.Abort()
 
        'TacheInclino.Suspend() 
        'TacheGPS.Suspend() (de cette manière je n'ai pas d'erreur mais le processus tourne toujours, de plus c'est déconseillé par le deboggeur.)
 
        TSStartLog.Enabled = False
        TSStopLog.Enabled = False
        TSlog.Visible = False
End Sub
il plante et m'affiche une erreur: System.ObjectDisposedException, le handle sécurisé à été fermé.
Du coup lorsque je ferme mon application le processus reste en cour sans doute parce que le thread n'est pas arreté.

Si vous savez m'aider je vous en serai très reconnaissant, après tout on est la pour ça.

Merci beaucoup.