J'ai deux threads dans mon application, le général qui va s'occuper de l'interface graphique et des événements associés et un thread qui va lire un très gros fichier.

Toutes les secondes (je vais augmenté ça plus tard), l'interface graphique mets à jour ses champs en fonction de ce qu'a lu l'autre thread. Le problème c'est qu'au bout d'un moment, le thread producteur ajoute un élément dans une liste que le lecteur est entrain de traiter. Comment faire pour ne pas soulever ce problème.

Le lecteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void raffraichirAffichage(){
...
        int index = 0;
	listView.BeginUpdate();
	listView.Items.Clear();
	foreach (Toon t in l.getListeToon()) {
		listView.Items.Add(t.Nom);
		if (t.Nom.Equals(nomSelectione)) {
			listView.Items[index].Selected = true;
		}
		index++;
	}
	listView.EndUpdate();
}
Le producteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
...
	agresseur = this.getListeToon().Find(Toon => Toon.Nom.Equals(nomAgresseur));
	if (agresseur == null) {
		agresseur = new Toon(nomAgresseur);
		this.getListeToon().Add(agresseur);
	}
...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public ToonListe getListeToon() {
	ToonListe ret = null;
	lock (this.listeToon) {
		ret = this.listeToon;
	}
	return ret;
}
Avec la méthode comme ça, le problème a lieu beaucoup plus tôt, comme si je perdais tous les avantages des threads

Merci d'avance