Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C# - WPF] ObservableCollection

NotSupportedOperation

    24 mars 2011 à 10:59:42

    Bonjour,

    Je suis en train d’écrire un client de messagerie. Je fait quelques test sur la partie de gestion des contacts.
    Pour communiquer avec le serveur j'utilise des Socket asynchrone, et pour la gestion des contacts :

    public ICollectionView ContactView { get; private set; }
        public ObservableCollection<string> Contact { get; private set; }
    


    Quand une des personnes que j'ai mise dans ma contact liste se connecte au service le serveur m'envoie une notification.
    Je la reçois dans une fonction de CallBack Asynchrone, je parse ce que le serveur m'as envoyer, et j'essaye d'ajouter un élément dans
    l'ObservableCollection et la je me tape un joli : "System.NotSupportedException" sur la ligne ou j'ajoute :

    switch (cmd)
                {
                    case ECommand.UserLogin :
                        Debug.WriteLine(@"CONTACT ADD");
                        if (Contact != null)
                            Contact.Add("contact add");
                        else
                            Debug.WriteLine(@"CONTACT IS NULL");
                        break;
    //ect...
    


    Le ViewModel n'ecoute pas encore cette Collection donc ce n'est pas a cause. Je pense que les Call Back fait avec les Socket Asynchrone creer un nouveau thread, mais je sais pas comment appeler le thread principale...

    Si vous savez pourquoi je suis preneur :)

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      24 mars 2011 à 14:05:14

      Essaye d'utiliser le Dispatche pour ajouter l'element puisque effectivement, le callback est depuis un autre Thread :

      this.Dispatcher.Invoke(...)
      
      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2011 à 14:43:52

        Citation : Mangepain

        Essaye d'utiliser le Dispatche pour ajouter l'element puisque effectivement, le callback est depuis un autre Thread :

        this.Dispatcher.Invoke(...)
        


        Bonjour, merci de ta réponse.
        Mon model n’hérite pas de la classe Window, comment puis-je faire appel au Dispatcher ?

        EDIT : J'ai trouver ceci sur StackOverFlow Ca a l'air de marcher correctement :

        public static void AddOnUI<T>(this ICollection<T> collection, T item) {
            Action<T> addMethod = collection.Add;
            Application.Current.Dispatcher.BeginInvoke( addMethod, item );
        }
        
        • Partager sur Facebook
        • Partager sur Twitter
          27 mars 2011 à 13:52:27

          Oui, effectivement, tu pouvais pas avoir accès au Dispatcher de ta Window depuis un ViewModel, mais effectivement, le dispatcher de "Application" fonctionne aussi
          • Partager sur Facebook
          • Partager sur Twitter

          [C# - WPF] ObservableCollection

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown