2009-12-03 3 views
0

Un thread s'exécute en arrière-plan qui essaie périodiquement de mettre à jour un composant ListView, mais chaque fois qu'il tente d'obtenir une "opération Cross-thread non valide: Control 'dlList' accédé à partir d'un thread autre que le thread sur lequel il a été créé. " Erreur. J'ai utilisé un délégué pour essayer de résoudre ce problème mais cela ne règle pas le problème. Y at-il un problème avec mon code? J'ai également essayé Invoke au lieu de BeginInvoke mais le même problème.Passer un appel cross-thread à un ListView

delegate void updateListItemDelegate(string tag, ListViewItem lv); 
    private void updateListItem(string tag, ListViewItem lv) 
    { 
     if (this.dlList.InvokeRequired) 
     { 
      this.dlList.BeginInvoke(new updateListItemDelegate(updateListItem),tag,lv); 
      return; 
     } 
     else 
     { 
      int index = -1; 
      foreach (ListViewItem x in dlList.Items) 
      { 
       if (x.Tag.ToString() == tag) 
        index = x.Index; 
      } 
      if (index != -1) 
      { 
       dlList.Items[index].SubItems[1] = lv.SubItems[1]; 
       dlList.Items[index].SubItems[3] = lv.SubItems[3]; 
      } 
     } 
    } 

Appelée via:

updateListItem(x.url, x.details); 
+0

Exactement où est levée l'exception? Pouvez-vous partager la pile d'appels de l'exception? –

Répondre

0

Ah. J'ai essayé {} catch {} autour du code de journaliser l'exception, je n'ai pas réalisé qu'un élément ListView que j'avais défini dans une classe nécessitait également un délégué pour faire un appel à lui ainsi que le composant de formulaire. Bon conseil Fredrik!

+0

n'oubliez pas d'accepter la réponse lorsque vous en avez un. –