Hier ist mal mein kompletter Quelltext soweit.
Das einzigste, was ich nun nicht verstanden habe ist
Spoiler anzeigen
Das einzigste, was ich nun nicht verstanden habe ist
Hinzukommt, dass du nun den ganzen Code im GUI-Thread ausführst.
Rufe deine UpdatePortData direkt und ohne Invoke auf.
Quellcode
- Option Strict On
- Public Class Form1
- Dim myPort As Array
- Dim Lokal_verbunden As Boolean
- Dim newString As String
- Dim Var_Licht_digital As Integer
- Dim Var_Licht_Analog As Single
- Dim Var_Poti1_digital As Integer
- Dim Var_poti1_analog As Single
- Dim Var_Poti2_digital As Integer
- Dim Var_poti2_analog As Single
- Dim Taster1 As Boolean
- Dim Taster2 As Boolean
- Dim Adresse As String
- Dim Wert As String
- Delegate Sub InvokeDelegate()
- Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
- SerialPort1.Close()
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- SerialPort1.NewLine = Environment.NewLine
- SerialPort1.Encoding = System.Text.Encoding.UTF8
- myPort = IO.Ports.SerialPort.GetPortNames()
- ComboBox1.Items.AddRange(CType(myPort, Object()))
- ComboBox1.Text = "COM3"
- ComboBox2.Text = CStr(9600)
- Button1.Enabled = False
- Button2.Enabled = False
- Button3.Enabled = False
- Button5.Enabled = False
- Button8.Enabled = False
- End Sub
- Private Sub UpdatePortData(newString As String)
- Dim Splitted As String() = newString.Split(CChar("#"))
- Dim count As Integer
- count = Splitted.Length
- If count = 2 Then
- Adresse = Splitted(0)
- Wert = Splitted(1)
- If Adresse = "A001" Then
- Var_Licht_digital = CInt(Wert)
- If cockpit.Visible Then
- cockpit.Gasgriff_Tacho.BeginInvoke(New InvokeDelegate(AddressOf Gasgriff_Tacho_verändern))
- End If
- End If
- If Adresse = "A003" Then
- Var_Poti1_digital = CInt(Wert)
- If cockpit.Visible Then
- cockpit.IGBT_Tacho.BeginInvoke(New InvokeDelegate(AddressOf IGBT_Tacho_verändern))
- End If
- End If
- If Adresse = "A007" Then
- Taster1 = CBool(CInt(Wert))
- If cockpit.Visible Then
- cockpit.PictureBox5.BeginInvoke(New InvokeDelegate(AddressOf Bremse_Anzeige_verändern))
- End If
- End If
- End If
- End Sub
- Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
- newString = SerialPort1.ReadLine.Trim
- Me.Invoke(Sub() UpdatePortData(newString))
- End Sub
- Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
- SerialPort1.Write("SLED1:1" + vbCr)
- newString = ""
- End Sub
- Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
- SerialPort1.Write("SLED1:0" + vbCr)
- newString = ""
- End Sub
- Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
- SerialPort1.Write("SLED2:0" + vbCr)
- newString = ""
- End Sub
- Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
- SerialPort1.Write("SLED2:1" + vbCr)
- newString = ""
- End Sub
- Private Sub Button10_Click(sender As System.Object, e As System.EventArgs) Handles Button10.Click
- SerialPort1.PortName = ComboBox1.Text
- SerialPort1.BaudRate = CInt(ComboBox2.Text)
- SerialPort1.Open()
- End Sub
- Private Sub Button11_Click(sender As System.Object, e As System.EventArgs) Handles Button11.Click
- SerialPort1.Close()
- End Sub
- Public Sub Gasgriff_Tacho_verändern()
- cockpit.Gasgriff_Tacho.Value = Var_Poti1_digital
- End Sub
- Public Sub IGBT_Tacho_verändern()
- cockpit.IGBT_Tacho.Value = Var_Licht_digital
- End Sub
- Public Sub Bremse_Anzeige_verändern()
- If Taster1 = True Then
- cockpit.PictureBox5.Image = Kontrollprogrammv1.My.Resources.Resources.bremse_gelb
- ElseIf Taster1 = False Then
- cockpit.PictureBox5.Image = Kontrollprogrammv1.My.Resources.Resources.bremse_rot
- End If
- End Sub
- Private Sub Button12_Click(sender As System.Object, e As System.EventArgs) Handles Button12.Click
- cockpit.Show()
- End Sub
- Private Sub Button13_Click(sender As System.Object, e As System.EventArgs) Handles Button13.Click
- Notaus.Show()
- End Sub
- Private Sub Button14_Click(sender As System.Object, e As System.EventArgs) Handles Button14.Click
- Akkuüberwachung.Show()
- End Sub
- Private Sub Button15_Click(sender As System.Object, e As System.EventArgs) Handles Button15.Click
- Batterie12V.Show()
- End Sub
- Private Sub Button16_Click(sender As System.Object, e As System.EventArgs) Handles Button16.Click
- motorstatus.Show()
- End Sub
- Private Sub Button17_Click(sender As System.Object, e As System.EventArgs) Handles Button17.Click
- canmodulstatus.Show()
- End Sub
- Public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- If SerialPort1.IsOpen = True Then
- Label6.Text = "Verbunden"
- Label6.ForeColor = Color.Green
- Lokal_verbunden = True
- Button4.Enabled = True
- Button7.Enabled = True
- Button6.Enabled = True
- Button9.Enabled = True
- Else
- Label6.Text = "Getrennt"
- Label6.ForeColor = Color.Red
- Lokal_verbunden = False
- Button4.Enabled = False
- Button7.Enabled = False
- Button6.Enabled = False
- Button9.Enabled = False
- End If
- End Sub
- End Class