Hallo Community,
es geht mal wieder um Invoke und Delegate. Ich, als VB6 Umsteiger, verstehe den Zusammenhang von Invoke, Delegate und Thread leider noch nicht so richtig. Es gibt sehr viele Beiträge im Netz zu diesem Thema, aber die sind irgendwie doch jedes Mal etwas anders, was mich nur noch mehr verwirrt. Es muss doch irgendwo einen Beitrag geben, der für einen „Unwissenden“ verständlich macht, (gerne auch anhand von Beispielen) wann und wie Delegate und Invoke bei einem anderen Thread einzusetzen sind. Bevor ich nun zu meiner eigentlichen Frage komme, beschreibe ich erst einmal mein Projekt. Mein Projekt startet mit einem Formular, auf dem diverse Buttons und neben diesen jeweils ein Label angeordnet sind. Mit dem Button-Click Ereignis wird ein Telegramm über dem COM Port zu einem angeschlossenen Gerät gesendet. Um die Formular Klasse übersichtlicher zu halten, habe ich u.a. die DataReceived Sub in einem Module ausgelagert. Die empfangenen Daten, die ich in der DataReceive Sub auslese, sollen nun im Formular im Label neben dem jeweiligen Button angezeigt werden.
1.) Wie bekomme ich die ausgelesenen Daten in eine Public Variable auf dem Formular, um sie in dem Label des jeweiligen Click Ereignisses einsetzen zu können?
2.) Ist es Möglich, dass die DataReceived Sub auf ein Funktion umzustellen, die die zurückgelesenen Daten als Rückgabewert zurückgibt und wie müsste ich das dann machen?
es geht mal wieder um Invoke und Delegate. Ich, als VB6 Umsteiger, verstehe den Zusammenhang von Invoke, Delegate und Thread leider noch nicht so richtig. Es gibt sehr viele Beiträge im Netz zu diesem Thema, aber die sind irgendwie doch jedes Mal etwas anders, was mich nur noch mehr verwirrt. Es muss doch irgendwo einen Beitrag geben, der für einen „Unwissenden“ verständlich macht, (gerne auch anhand von Beispielen) wann und wie Delegate und Invoke bei einem anderen Thread einzusetzen sind. Bevor ich nun zu meiner eigentlichen Frage komme, beschreibe ich erst einmal mein Projekt. Mein Projekt startet mit einem Formular, auf dem diverse Buttons und neben diesen jeweils ein Label angeordnet sind. Mit dem Button-Click Ereignis wird ein Telegramm über dem COM Port zu einem angeschlossenen Gerät gesendet. Um die Formular Klasse übersichtlicher zu halten, habe ich u.a. die DataReceived Sub in einem Module ausgelagert. Die empfangenen Daten, die ich in der DataReceive Sub auslese, sollen nun im Formular im Label neben dem jeweiligen Button angezeigt werden.
1.) Wie bekomme ich die ausgelesenen Daten in eine Public Variable auf dem Formular, um sie in dem Label des jeweiligen Click Ereignisses einsetzen zu können?
2.) Ist es Möglich, dass die DataReceived Sub auf ein Funktion umzustellen, die die zurückgelesenen Daten als Rückgabewert zurückgibt und wie müsste ich das dann machen?
VB.NET-Quellcode
- Option Explicit On
- Option Strict On
- Imports System
- Imports System.IO.Ports
- Module Module1
- Public MySerialPort As New SerialPort
- Private comBuffer As Byte()
- Private Delegate Sub MyDelegate()
- Private MyDelegate1 As MyDelegate
- Public Sub MySerialPort_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)
- MyDelegate1 = New MyDelegate(AddressOf Form1.EncodeReceivedData)
- Dim n As Integer = MySerialPort.BytesToRead
- comBuffer = New Byte(n - 1) {}
- MySerialPort.Read(comBuffer, 0, n)
- 'Aufruf der Delegate Routine
- MyDelegate1.Invoke(comBuffer) '<-- Zu viele Argumente für "Public Overridable Sub Invoke()"
- 'Schnittstelle schließen
- MySerialPort.Close()
- End Sub
- End Module