2016-07-31 14 views
0

Also habe ich ein Stück Code, der Informationen zu listView hinzufügt, aber es scheint, als ob es irgendwie "abgehört" wird. Also, ich habe 2 Informationen. Es fügt eins perfekt hinzu, aber wenn es das zweite addiert, sagt es mir, dass es dort bereits existiert & zeigt mir den ersten Gegenstandsnamen, also im Grunde irgendwie versucht es, das gleiche Ding 2 mal hinzuzufügen.C# Hinzufügen von Elementen zur Listenansicht wird von Threads abgehört?

Ich versuchte auch "Debugging" es, indem Konsole Eingabe für Benutzername, Passwort etc .. Alle diese waren anders.

// EDIT

ich gerade tat 2. debug, wenn Informationen wird auf addItems() void, dann Datenänderungen übergeben, so dass ich denke, es ist irgendwie von Fäden abgehört wird.

+0

Sorry, machst du einen 'neuen ListViewItem (); 'jedes Mal? –

+0

Nicht jedes Mal habe ich es beim Start eines Programms angerufen. –

+0

Sie können es nicht wirklich wieder hinzufügen ... wenn ich richtig verstehe, was vor sich geht ... Bitte teilen Sie mehr von Ihrem Code und was Sie erreichen wollen –

Antwort

0

Entschuldigung, wenn dies nicht die Lösung war, nach der Sie gesucht haben. Mit einigen Mangel an Details zu Ihrer Frage wurde dies aus dem gemacht, was ich möglicherweise verstehen könnte

Ist info eine benutzerdefinierte Klasse? Wenn ja, würde ich davon ausgehen, dass SubItems auch ein List-Objekt ist. Wenn diese Szenarien korrekt sind, dann sollten Sie Ihre Klasse etwas aussehen

public class info 
{ 
    public string Text { get; set; } 
    public List<string> SubItems { get; set; } 

    /* Other Code */ 
} 

Nun, wenn ich mich nicht täusche es scheint, wie Sie die Daten in eine Zeichenfolge serialisiert werden versuchen, und dann an die Listview hinzufügen? Wenn ja gibt es ein paar Möglichkeiten, wie Sie über das tun dies gehen könnte:

public class info 
{ 
    /* Other Code */ 

    public override string ToString() 
    { 
     return $"Username: {Text}; Password: {SubItems[0]}; Points: {SubItems[1]}; Level: {SubItems[2]};" 
    } 
} 

Nun, falls dies alles stimmt, könnten Sie jetzt durchführen:

info PersonInfo = new Info() 
{ 
    Text = Username; 
    SubItems = new List<string>() 
    { 
     Password, 
     Points.ToString(); 
     Level.ToString(); 
    } 
} 

ListView1.Items.Add(ParsonInfo.ToString()); 
+0

Hmm, im Grunde genommen. Nach dem Empfang von Informationen von Servern wird es die Informationen an addItem void weiterreichen, aber es scheint so zu sein, als würden die Info-Änderungen auf die erste übertragen. Also, wenn man Peter ist, ist 2. James und Info wird weitergegeben, dann ist Info innerhalb der AddItem Void Peter & Peter. –

+0

Um Informationen zu erhalten, verwende ich Invoke, weil es erforderlich ist, aber ich verwende nicht aufrufen, um die Elemente hinzuzufügen, weil es scheint, als wäre es nicht erforderlich. –

+0

Erschaffst du zufällig neue Instanzen der Info-Klasse? Denken Sie daran, wenn Sie Objekte auf statisch setzen, dann könnte "nur eine" existieren. Also möglicherweise durch das Erstellen einer neuen Info-Instanz: info Peter = neue Info() info James = neue Info() dann tun ListView1.Items.Add (Peter); ListView1.Items.Add (James); Natürlich viel robuster! –

Verwandte Themen