Benutzer mit den meisten Antworten
Ereignis aus Serieller Schnittstelle auswerten, Multithreading

Frage
-
Ich habe ein Hauptprogramm oben
Und eine Eventroutine
Das Event trifft ein, die Textbox wird aber nicht gefüllt
Wie kann ich eine einen Wert in die Textbox eingeben oder eine Subroutine mit Priorität im Hauptprogramm auslösen?
Ich weiss, es ist ein Multithreading-Problem, Invoke, Delegates, aber ich kriegs nicht hin (Grundlagenmängel). Vielleicht kann mir jemand die Codezeilen hineinflicken
Imports System.Threading
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
...
SerialPort1.PortName = "COM5"
SerialPort1.Open()
...
---------------------------------------------
Private Sub SerialPort1_PinChanged(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialPinChangedEventArgs) Handles SerialPort1.PinChanged
If SerialPort1.DsrHolding = True Then
Beep() 'Funktioniert
MsgBox("Alarm") 'Funktioniert
Me.TextBox1.Text = "DSR auf 1" 'Das geht nicht
End If
End Sub
End Class
Antworten
-
Hallo Roland,
Du hast das Problem schon richtig erkannt.
Steuerelemente darfst Du aus den Ereignissen des SerialPort nicht direkt ansprechen,
da es sich dabei um einen sekundären Thread (aus dem TheadPool) handelt.Dazu musst Du Control.Invoke bemühen, beschrieben unter:
Gewusst wie: Threadsicheres Aufrufen von Windows Forms-Steuerelementenwobei man das bei Visual Basic 2010 mit Lambda-Ausdrücken vereinfachen kann:
http://stackoverflow.com/questions/3869206/vb-net-invoke-a-property-change-in-a-control
und so die Notwendigkeit für spezielle Delegaten und eine explizite Methode entfällt.Gruß Elmar
- Als Antwort markiert Robert Breitenhofer Freitag, 13. Mai 2011 14:11
-
Hallo Roland,
das ist das selbe Thema. Wie man aus einer Ereignisprozedur des Serialport auf ein Windows Form Steuerelement zugreift.
Dort dargestellt mit dem datareceived Ereignis. Prinzipiell must Du genauso vorgehen
schöne Grüße Ellen
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort markiert Robert Breitenhofer Freitag, 13. Mai 2011 14:11
Alle Antworten
-
Hallo Roland,
Du hast das Problem schon richtig erkannt.
Steuerelemente darfst Du aus den Ereignissen des SerialPort nicht direkt ansprechen,
da es sich dabei um einen sekundären Thread (aus dem TheadPool) handelt.Dazu musst Du Control.Invoke bemühen, beschrieben unter:
Gewusst wie: Threadsicheres Aufrufen von Windows Forms-Steuerelementenwobei man das bei Visual Basic 2010 mit Lambda-Ausdrücken vereinfachen kann:
http://stackoverflow.com/questions/3869206/vb-net-invoke-a-property-change-in-a-control
und so die Notwendigkeit für spezielle Delegaten und eine explizite Methode entfällt.Gruß Elmar
- Als Antwort markiert Robert Breitenhofer Freitag, 13. Mai 2011 14:11
-
Hallo Roland,
das ist das selbe Thema. Wie man aus einer Ereignisprozedur des Serialport auf ein Windows Form Steuerelement zugreift.
Dort dargestellt mit dem datareceived Ereignis. Prinzipiell must Du genauso vorgehen
schöne Grüße Ellen
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort markiert Robert Breitenhofer Freitag, 13. Mai 2011 14:11