Benutzer mit den meisten Antworten
Bräuchte Hilfe wegen übergabe eines Strings von einem Thread in den Anderen

Frage
-
Nachdem ich mich nun etwas mit Delegates und Threads befasst habe, habe ich nun folgenden Code. Leider kommt in der Zeile "YYY.INVOKE(SerIn)" immer eine Null-Verweis Fehlermeldung. Warum, kann ich mir nicht erklären.
wo liegt denn das Problem??Public Class MLTRS232 Public Shared Vrs As String = "V0.0.1" 'Globale Versionsnummer Public Shared PrgTeil As String = "MLT-RS232 Steuerung" 'Globaler Programmteilname Public Shared Datum As String = "28.09.2010" 'Änderungs-/Erstelldatum Public Shared ByteIn() As Byte Private Shared SerIn As String Private Shared WithEvents Serial As New IO.Ports.SerialPort 'Seriellen Port instanzieren Private Delegate Sub Data(ByVal XXX As String) 'Delegate einrichten Dim d As New Data(AddressOf Empf) Private Shared YYY As Data Public Shared Sub Send() With Serial 'Eigenschaften RS232 festlegen. .PortName = "COM1" 'Portname .Handshake = IO.Ports.Handshake.None 'Kein handshaking .BaudRate = 9600 'Baudrate .Parity =IO.Ports.Parity.None 'Ohne Parity .DataBits = 8 '8 Datenbits .StopBits =IO.Ports.StopBits.One 'ein Stoppbit .RtsEnable = True 'RTS-Aktivieren .DtrEnable = True 'DTR-Aktivieren End With Serial.Open() 'Port öffnen 'Zum Testen des Sendens Befehl für die Befehlsübersicht zum MLT senden. Serial.Write(Chr(&H14)) 'Befehl $14 zum MLT senden. End Sub Private Shared Sub Empf(ByVal DD As String) ReDim ByteIn(DD.Length - 1) For A As Integer = 0 To DD.Length - 1 ByteIn(A) = Asc(DD.Substring(A, 1)) Next End Sub '****************************************************************************** '* Ereignishandler für die RS-232 Schnittstelle. Dieser wird in einem separa- * '* ten Tread ausgeführt!! * '****************************************************************************** Private Shared Sub Serial_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Serial.DataReceived SerIn = Serial.ReadExisting YYY.Invoke(SerIn) End Sub End Class
Gelegentlicher Programmierer für Freizeitprojekte
Antworten
-
Hallo Roger,
Nachdem ich mich nun etwas mit Delegates und Threads befasst
habe, habe ich nun folgenden Code. Leider kommt in der Zeile
"YYY.INVOKE(SerIn)" immer eine Null-Verweis Fehlermeldung.
Warum, kann ich mir nicht erklären.Weil Du zwar eine Variable mit
Private Shared YYY as Data
deklariert hast, dieser Variablen jedoch nirgendwo eine
Instanz irgendeines Objektes zugewiesen hast.Offenbar hast Du die Antworten auf Deine Frage(n) in
http://social.msdn.microsoft.com/Forums/de-DE/vbasicexpresseditionde/thread/91571ea8-a0cf-499b-b37f-3bc0c686a3c1
entweder nicht gelesen oder immer noch nicht verstanden.In Deinem hier gezeigten Code gibt es mehr als ein Problem.
Private Delegate Sub Data(ByVal XXX As String) 'Delegate einrichten
Dim d As New Data(AddressOf Empf)Hier hast Du einen neuen Delegaten (Instanz) erstellt
und der Variablen d zugewiesen.Private Shared YYY As Data
Mit vorstehender Zeile hast Du eine weitere Variable
(YYY) vom Typ Data deklariert, welcher Du aber nirgendwo
etwas zuweist, also nirgendwo eine Befehlszeile wie z.B.
die nachfolgende ausgeführt wird.YYY = New Data(AddressOf Empf)
Private Shared Sub Serial_DataReceived _> (ByVal sender As Object, _
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs _
) Handles Serial.DataReceived
SerIn = Serial.ReadExisting
YYY.Invoke(SerIn)YYY hat in vorstehender Zeile bei Deinem Code den
Wert Nothing.
Wenn schon, dann könntest Dud.Invoke(SerIn)
schreiben.
Bleibt aber die Frage, was Du damit erreichen willst.End Sub
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Robert Breitenhofer Dienstag, 16. November 2010 08:37
Alle Antworten
-
Hallo Roger,
Nachdem ich mich nun etwas mit Delegates und Threads befasst
habe, habe ich nun folgenden Code. Leider kommt in der Zeile
"YYY.INVOKE(SerIn)" immer eine Null-Verweis Fehlermeldung.
Warum, kann ich mir nicht erklären.Weil Du zwar eine Variable mit
Private Shared YYY as Data
deklariert hast, dieser Variablen jedoch nirgendwo eine
Instanz irgendeines Objektes zugewiesen hast.Offenbar hast Du die Antworten auf Deine Frage(n) in
http://social.msdn.microsoft.com/Forums/de-DE/vbasicexpresseditionde/thread/91571ea8-a0cf-499b-b37f-3bc0c686a3c1
entweder nicht gelesen oder immer noch nicht verstanden.In Deinem hier gezeigten Code gibt es mehr als ein Problem.
Private Delegate Sub Data(ByVal XXX As String) 'Delegate einrichten
Dim d As New Data(AddressOf Empf)Hier hast Du einen neuen Delegaten (Instanz) erstellt
und der Variablen d zugewiesen.Private Shared YYY As Data
Mit vorstehender Zeile hast Du eine weitere Variable
(YYY) vom Typ Data deklariert, welcher Du aber nirgendwo
etwas zuweist, also nirgendwo eine Befehlszeile wie z.B.
die nachfolgende ausgeführt wird.YYY = New Data(AddressOf Empf)
Private Shared Sub Serial_DataReceived _> (ByVal sender As Object, _
ByVal e As System.IO.Ports.SerialDataReceivedEventArgs _
) Handles Serial.DataReceived
SerIn = Serial.ReadExisting
YYY.Invoke(SerIn)YYY hat in vorstehender Zeile bei Deinem Code den
Wert Nothing.
Wenn schon, dann könntest Dud.Invoke(SerIn)
schreiben.
Bleibt aber die Frage, was Du damit erreichen willst.End Sub
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)- Als Antwort markiert Robert Breitenhofer Dienstag, 16. November 2010 08:37