Programm friert ein ohne Fehlermeldung

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von newbie.

    Programm friert ein ohne Fehlermeldung

    Hallo zusammen,

    eigentlich sollte es nicht so schwer sein...
    Form1 öffnet Comport (RFID-Leser)
    Karte wird gelesen

    VB.NET-Quellcode

    1. 'Dekleration
    2. Private Delegate Sub DelegateSub()
    3. Private Datenanzeigen As New DelegateSub(AddressOf RFIDString)


    VB.NET-Quellcode

    1. Private Sub MySerial_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles _mySerial.DataReceived
    2. Dim enc As System.Text.Encoding = New System.Text.ASCIIEncoding()
    3. Try
    4. _puffer = _mySerial.ReadTo(vbCrLf)
    5. Debug.WriteLine(_puffer) 'hier abgespeckt, normalerweise findet hier eine DB Abfrage statt.
    6. Me.Invoke(Datenanzeigen)
    7. Catch ex As Exception
    8. MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")
    9. End Try
    10. End Sub


    VB.NET-Quellcode

    1. Private Sub RFIDString()
    2. txtReader.Text = _puffer
    3. Form2.Puffer = _puffer
    4. btnForm2.PerformClick() 'oder direkt me.close
    5. End Sub


    VB.NET-Quellcode

    1. Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
    2. Try
    3. If _mySerial.IsOpen Then _mySerial.Close() ' Port wieder Schließen
    4. Catch ex As Exception
    5. Me.Invoke(Sub() Me.Close())
    6. End Try
    7. End Sub
    8. Private Sub btnForm2_Click(sender As Object, e As EventArgs) Handles btnForm2.Click
    9. Form2.Show()
    10. Me.Close()
    11. End Sub


    Form2 öffnet, Form1 schließt aber nicht
    und das ganze friert ein ohne eine Fehlermeldung.

    Was übersehe ich?

    Vielen Dank im vorraus für eure Hilfe.
    Wie ist wo Form2 von Dir deklariert?
    Falls die Antwort: »nirgends außer bei Form2.Show() ist«, dann
    Warum »Form1.Show« und Co. einem irgendwann ins Bein schießen
    Dialoge richtig instanziieren

    VB.NET-Quellcode

    1. Catch ex As Exception
    Fange nur Exceptions ab, die Du kennst und sinnvoll bearbeiten kannst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Dann solltest Du das ändern.
    Der Knackpunkt ist die Endlosschleife durch Dein bereits von mir angeprangertes Catch ex As Exception. Da dort alle Exceptions abgefangen werden und nicht nur die eine Sorte, die Du mit dem Catch-Block-Teil abfangen willst, gibt es (wohl) immer wieder die gleiche (oder gar dieselbe?) Exception, die bei Closing (auftritt). Dann wird Me.Close wieder aufgerufen und die Exception wird gefangen. Me.Close wird wieder aufgerufen und die Exception wird gefangen. Me.Close wird wieder aufgerufen und die Exception wird gefangen …
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    newbie schrieb:

    Form2 ist im designer erzeugt worden.
    Du verwendest die sch... ranz mist total veraltete VB6-Kompatibilitäts-Instanz.
    Erzeuge Dir eine Instanz mit New.
    Das hat Dir @VaporiZed bereits in Post #2 geschrieben.
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank für die tollen Tipps, einiges an alten VB6 habe ich mich bereits entledigt, aber leider doch noch nicht alles.

    Bei mir ist noch ein anderes Problem wie es scheint.
    Der Datareceived-Event hängt/Comport lässt sich nicht schließen.
    Hab es schon so probiert...

    VB.NET-Quellcode

    1. If _mySerial.IsOpen Then
    2. RemoveHandler _mySerial.DataReceived, AddressOf btnForm2_Click
    3. Debug.WriteLine("RemoveHandler _mySerial.DataReceived")
    4. _mySerial.Close() ' Port wieder Schließen
    5. Debug.WriteLine("_mySerial.Close")
    6. End If

    newbie schrieb:

    VB.NET-Quellcode

    1. RemoveHandler _mySerial.DataReceived, AddressOf btnForm2_Click
    Ist da eine Zuordnung nicht korrekt?
    Benennst Du die DataReceived-Prozedur btnForm2_Click :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!