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.
"Même chose pour l'inclinomètre.
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
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 :
il plante et m'affiche une erreur: System.ObjectDisposedException, le handle sécurisé à été fermé.
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
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.
Partager