Applicatie wil niet naar application.exit() luisteren

Status
Niet open voor verdere reacties.

tomwerf

Gebruiker
Lid geworden
14 nov 2000
Berichten
52
Hallo allemaal.
Ik heb een programma waarin ik een compoort aanspreek.
Dat werkt uitstekend, behalve in mijn mooie try/catchblock.
De bedoeling is dat de applicatie gaat afsluiten als de poort bezet is.
Maar het commando application.exit() wordt gewoon genegeerd door mijn programma.
Hier is de code:
Code:
Private Function sendData(ByVal command As String) As String
        'MsgBox(command & " Wordt naar de poort geschreven")
        Dim temp As String = ""
        Try
            With serialPort                                     ' Stel poort para's in
                .PortName = MyBase.getConnection()              ' Vraag de poort naam op aan de super class
                .BaudRate = 9600
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
                .Encoding = System.Text.Encoding.ASCII
                .WriteTimeout = 5000                            ' timeout
                .ReadTimeout = 5000
                .Open()
            End With

            Sleep(100)                                          ' Wacht telkens 0,1 seconde tussen de commando's
            serialPort.Write("a")                               ' Haal apparaat uit slaapstand doro willekeurig commando te sturen
            Sleep(100)
            serialPort.ReadLine()                               ' Wacht op antwoord, maar doe niks met het antwoord
            serialPort.ReadLine()
            Sleep(100)
            For Each c As Char In command                   ' Stuur het commando per char
                'MsgBox("Sending: " & c)
                Sleep(200)
                serialPort.Write(c)
            Next

            While True                                             ' Loop tot met exit While wordt uitgebroken
                temp = temp & serialPort.ReadLine()             ' Lees uit tot de ! en plak dat in een string
                Sleep(100)
                If temp.Substring(temp.Length() - 2, 1) = "!" Then
                    Exit While
                End If
            End While
            serialPort.Close()                                  ' Sluit de poort
            Return temp                                         ' Geef de string terug
        Catch ex As TimeoutException
            MsgBox("Bij de verbinding heeft een timeout opgetreden")
            serialPort.Close()
            Return "!" & vbCr
        Catch ex As UnauthorizedAccessException
            MsgBox(ex.Message)                                  ' Poort is bezet. Sluit applicatie af
            Application.Exit()   '<-- werkt niet???
            MsgBox("hier komen kan niet")  ' <-- komt hij dus toch :shocked:
        End Try

Wie weet wat ik fout doe???

Alvast bedankt!!!
 
Sedert ik nu ook veel met Serial data werk, weet ik wat bij miij het probleem is:

Zord ervoor dat alle openstaande verbindingen en streams (ReadLine e.d.) en running
threads gesloten worden voordat de application.exit werkt.

btw, me.close() sluit enkel de formlayout af, niet de processen en werkt bijgevolg niet!
me.close() zal enkel het programma volledig beëindigen als er niets van het programma nog draait.
 
Oei, ik zie net dat ik niet meer op deze vraag had gereageerd.
Mijn excuses daarvoor.
Bedankt voor de antwoorden.
me.close() werkt inderdaad.

En zoals WarnedGraph zegt:
Ik heb er nog een serialPort.Close() tussen gezet, voordat me.close() wordt aangeroepen.
Als ik die exception heb gehad, zie ik de appliatie niet meer staan in windows taakbeheer. en dus volgens mij goed is afgesloten.
Bedankt voor de uitleg!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan