IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Fermeture de thread impossible


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut Fermeture de thread impossible
    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.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    il ne faut pas utiliser abort, sauf en cas de soucis

    le mieux est d'avoir un flag, qui une fois modifié te fait sortir de la boucle infinie
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Par défaut
    Merci beaucoup c'était tout con mais je n'y avais pas pensé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sockets et threads : impossible d'écrire
    Par Cyril012 dans le forum Réseau
    Réponses: 0
    Dernier message: 26/06/2012, 15h24
  2. [Graphics View] Fermeture de QDialog impossible après exec()
    Par defrouille dans le forum Qt
    Réponses: 8
    Dernier message: 12/01/2011, 18h33
  3. Fermeture de thread
    Par Racailloux dans le forum MFC
    Réponses: 7
    Dernier message: 07/08/2007, 14h26
  4. Fermeture de thread/Stopper recvfrom
    Par homeostasie dans le forum Visual C++
    Réponses: 7
    Dernier message: 17/11/2006, 09h59
  5. Fermeture de formulaire impossible
    Par julio02200 dans le forum IHM
    Réponses: 11
    Dernier message: 21/07/2006, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo