Dispatcher et TabControl.Items.Remove - Accès inter-threads non valide
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:
tabControlConversation.Items.Remove(monItem);
Je me retrouve avec une méthode appelé par le code du Content du TabItem :
Code:
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:
1 2 3 4 5
|
public void ThreadTueur()
{
this.Dispatcher.BeginInvoke(delegate { tabControlConversation.Items.Remove(monItem); });
} |
J'ai également essayé comme ceci :
Code:
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:
Accès inter-threads non valide
Une idée ?
Merci.