vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Problem beim Gleichsetzen zweier Listen 
Autor: sledgehammer89
Datum: 08.08.12 15:44

Hallo Forum,

die Betreffzeile mag auf ein einfaches Problemchen hinweisen, ich warne aber schonmal vor: das wird nicht trivial... leider . Und auch nicht kurz
Sollte mein Versuch, das Problem erfolgreich zu schildern, fehlschlagen, lasst mich das bitte wissen, ich bin gerne bereit, alles ausführlichst zu schildern

Aber eins nach dem anderen.

Was macht meine Anwendung denn allgemein?
Meine VB.Net-Applikation soll drei Komponenten miteinander vernetzen: eine Datenbank, einen TCP-Listener und eine Baugruppe, die über einen CAN-Bus angesprochen wird (ein CAN-to-USB Converter macht den Anschluss an den PC möglich).

Wo tritt das Problem auf?
Damit die 3 Komponenten untereinander Daten austauschen können und die Windows-Form nicht einfriert, habe ich mich dazu entschlossen, den Datenaustausch über Threads und Events zu realisieren (das funktioniert auch prima).
Wer schonmal mit Threads gearbeitet hat, weiß, dass man sowas wie Invoke-Funktionen benötigt, um mit den Daten aus den Threads auch arbeiten zu können. Und in einer dieser Invoke-Funktionen scheint sich bei mir ein Fehler eingeschlichen zu haben (nehme ich zumindest an...).

Wie äußert sich das Problem?
Ich will zunächst diese Invoke-Funktion mal posten:

Private Sub kw_AdapterInfo(ByVal InfoData As List(Of String)) Handles _
  kabelwagen.AdapterInfoAvailable
        'Variablen
        Dim callback As kwAdpaterInfo_Callback
        Dim test As Object
 
        test = InfoData
 
        If (Me.InvokeRequired = True) Then
            callback = New kwAdpaterInfo_Callback(AddressOf kw_AdapterInfo)
            Me.Invoke(callback, test)
        Else
 
            '--------------------------------------------
            ' Neuen Wert mit altem vergleichen
            '--------------------------------------------
            'Der alte Wert ist global gespeichert
            CompareFoundAdapters(InfoData)
 
        End If
 
    End Sub
Derjenige, der mit Threads schon was zu schaffen hatte, kennt den Ablauf. Für andere, die das interessiert: fragt nach, ich erklärs gerne.

Aber wo ist denn jetzt der Fehler?
Der Fehler kommt offenbar erst in der Funktion
CompareFoundAdapters(InfoData)
zum Tragen (diese Funktion wird beim zweiten Aufruf erst ausgeführt). In dieser Funktion habe ich jetzt das Problem, dass ich den alten und den neuen Wert nicht miteinander vergleichen kann. Damit ich das besser beschreiben kann, poste ich jetzt mal ein Teil dieser Funktion:

 Private Sub CompareFoundAdapters(ByVal newValueList As List(Of String))
        'Variablen
        Dim count As Integer
        Dim newAdapter, serial As String
        Dim tempList, StatusUnterwegs, StatusFrei, newCable As New List(Of _
          String)
 
        '--------------------------------------------
        ' Listen vergleichen
        '--------------------------------------------
        'alte Liste
        For Each element In FoundAdaptersList
            'neue Liste
            newAdapter = newValueList(count)
 
            If element Like newAdapter Then
                'Alles OK, nächstes element
            Else
                'I.was ist anders
            End If
 
            count += 1
 
        Next element
 
        '--------------------------------------------
        ' Alte Liste überschreiben
        '--------------------------------------------
        FoundAdaptersList = newValueList
Was ich tun möchte ist, den alten Wert
FoundAdaptersList
mit dem neuen Wert
ByVal newValueList As List(Of String)
zu vergleichen. Beide Werte sind übrigens Listen! Das heißt ich gehe alle Elemente beider Listen peu a peu durch, vergleiche sie und tu dann was. Am Schluss überschreibe ich den alten Wert mit dem neuen.

Das Problem ist immernoch nicht klar nehme ich an. Das kommt auch jetzt:
Ändern sich die Inhalte des neuen Werts, ändert sich AUTOMATISCH auch SOFORT der alte Wert. Aber nicht erst, nachdem ich
FoundAdaptersList = newValueList
ausgeführt habe, nein, die Werte sind schon gleich ehe die Funktion
CompareFoundAdapters(InfoData)
überhaupt in der Invoke-Funktion aufgerufen wurde!

Das klingt jetzt sicher abentuerlich, aber das ist genau so! Ich renn hier schon seit Stunden im Kreis uns hüpf im Dreieck aber ich bekomm den Fehler ums verrecken nicht raus.

Für eure Hilfe bin ich sehr dankbar!!!!

Lg
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Problem beim Gleichsetzen zweier Listen1.102sledgehammer8908.08.12 15:44
Re: Problem beim Gleichsetzen zweier Listen687ModeratorFZelle08.08.12 21:32
Re: Problem beim Gleichsetzen zweier Listen677sledgehammer8909.08.12 08:01
Re: Problem beim Gleichsetzen zweier Listen671ronnie09.08.12 08:43
Re: Problem beim Gleichsetzen zweier Listen668sledgehammer8909.08.12 09:12
Re: Problem beim Gleichsetzen zweier Listen664ModeratorDaveS09.08.12 09:25
Re: Problem beim Gleichsetzen zweier Listen678sledgehammer8909.08.12 09:27
Re: Problem beim Gleichsetzen zweier Listen714ronnie09.08.12 10:06
Re: Problem beim Gleichsetzen zweier Listen662sledgehammer8909.08.12 15:50

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel