Bonjour,

Je vous explique tout d'abord ma situation pour mieux comprendre mon besoin :
J'ai un TabControl géré de manière dynamique. Donc avec :
  • Une méthode permettant de créer des nouvelles TabItems.
  • Une méthode permettant de supprimer les TabItems

Le problème survient lors de la suppression d'un Item du TabControl.
Ceci pour une bonne raison : Je demande la suppression de l'Item alors que la méthode synchrone que j'appelle pour la suppression se trouve justement dans l'item (du Content) qui doit être supprimé.

Pour résoudre ce problème je me suis donc dit :
J'utilise un thread (ou timer) qui se charge de la suppression du TabItem, comme çà la TabItem n'a pas besoin d'attendre la fin du thread pour terminer son traitement.
Bref ...

Donc l'objectif finale est de pouvoir faire ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
tabControlConversation.Items.Remove(monItem);
Je me retrouve avec une méthode appelé par le code du Content du TabItem :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
   Thread thTueurDeConversation;
    Conversation conversationASupprimer;
    public void cmdQuitterConversation(Conversation laConversation)
    {
        conversationASupprimer = laConversation;
        thTueurDeConversation = new Thread(new ThreadStart(ThreadTueur));
        thTueurDeConversation.Start();
     }
Dans ma méthode ThreadTueur j'ai ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
public void ThreadTueur()
{
this.Dispatcher.BeginInvoke(delegate { tabControlConversation.Items.Remove(monItem); });
}
J'ai également essayé comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
public void ThreadTueur()
{
   this.Dispatcher.BeginInvoke(new ChangerTabControlItem(ChangerTabControl), monItem);
}
private delegate void ChangerTabControlItem(TabItem monItem);
private void ChangerTabControl(TabItem monItem)
{
  tabControlConversation.Items.Remove(monItem);
  MessageBox.Show("Remove terminé");
}
Et dans tout les cas j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Accès inter-threads non valide
Une idée ?
Merci.