Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : BindingListView : déclancher le filtrage dans un thread [ Windows / Autre ] (mathmax)

vendredi 2 novembre 2007 à 19:41:26 | BindingListView : déclancher le filtrage dans un thread

mathmax

Bonjour,

quelqu'un m'avais conseillé cette très bonne implémentation d'une BindingListView. J'aimerais cependant déclencher le filtrage dans un Thread afin de pouvoir l'interrompre si un autre filtrage est demandé avant que le premier ne soit fini.
J'ai transformé un peu la propriété Filter comme ceci :

public IItemFilter<T> Filter
{
get
{
return _filter;
}
set
{
// Do not allow a null filter. Instead, use the "include all items" filter.
if(value == null) value = IncludeAllItemFilter<T>.Instance;
if(_filter != value)
{
_filter = value;
if(thrFilter != null)
thrFilter.Abort();
 
thrFilter = new Thread(() =>
{
FilterAndSort();
// The list has probably changed a lot, so get bound controls to reset.
OnListChanged(ListChangedType.Reset, -1);
});
 
thrFilter.Priority = ThreadPriority.Lowest;
thrFilter.Start();
}
}
}

Le problème est que mon contrôle auquel ma listeview est bindée n'est plus mis à jour. Je pense que c'est parce que l'événement listChanged n'est pas déclenché dans le même Thread que celui dans lequel on a fait le binding. Auriez-vous une idée pour résoudre ce problème ?

Merci.

Mathmax

****************************************


lundi 5 novembre 2007 à 09:17:42 | Re : BinidingListView : déclancher le filtrage dans un thread

sebmafate

Membre Club Administrateur CodeS-SourceS
il faut que tu exécutes la méthode OnListChanged dans le même thread que le formulaire...
Regarde cette source qui montre l'utilisation de delegate dans un context un peu différent (à l'aide de AutoResetEvent) : http://www.csharpfr.com/codes/RESTREINDRE-TEMPS-EXECUTION-METHODE_41928.aspx


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]

lundi 5 novembre 2007 à 21:51:32 | Re : BindingListView : déclancher le filtrage dans un thread

mathmax

Par défaut c'est le même thread non ? Puisque c'est dans ma form que j'appelle la méthode applyfilter qui set la propriété filter. Sinon, comment récupérer le Thread de ma form ?

Mathmax

****************************************


mardi 6 novembre 2007 à 01:13:03 | Re : BindingListView : déclancher le filtrage dans un thread

mathmax

Le problème c'est que si j'écris ça :

        public IItemFilter<T> Filter
        {
            get
            {
                return _filter;
            }
            set
            {
                // Do not allow a null filter. Instead, use the "include all items" filter.
                if (value == null) value = IncludeAllItemFilter<T>.Instance;
                if (_filter != value)
                {
                    _filter = value;
                    if (thrFilter != null)
                        thrFilter.Abort();

                    thrFilter = new Thread(() =>
                        {
                            FilterAndSort();
                            // The list has probably changed a lot, so get bound controls to reset.
                        });

                    thrFilter.Priority = ThreadPriority.Lowest;
                    thrFilter.Start();

                    OnListChanged(ListChangedType.Reset, -1);
                }
            }
        }

OnListChanged() est appelée avant que le thread ne soit finit.
L'idéal serait de lever un évenement quand le thread thrFilter se termine ou est avorté et de déclancher OnListChanged() dans le thread principal quand cet évenement est levé. Mais je ne sais pas si cela est possible...


Mathmax

****************************************


mardi 6 novembre 2007 à 06:29:53 | Re : BindingListView : déclancher le filtrage dans un thread

sebmafate

Membre Club Administrateur CodeS-SourceS
D'où l'intérêt d'utiliser les AutoResetEvent... à la fin de ton thread, un évènement est levé...


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]

mardi 6 novembre 2007 à 11:38:22 | Re : BindingListView : déclancher le filtrage dans un thread

mathmax


Je ne peux pas utiliser WaitOne() dans le thread principal car celui-ci est alors bloqué et attendant la fin du thread "thrFilter". Il faudrait que je puisse récupérer l'évenement, c'est à dire abonner une méthode à l'évenement. Comment faire cela ?


Mathmax

****************************************


mardi 6 novembre 2007 à 11:55:41 | Re : BindingListView : déclancher le filtrage dans un thread

sebmafate

Membre Club Administrateur CodeS-SourceS
ah oui... c'est plus cette source là qu'il faudrait que tu regardes : http://www.csharpfr.com/codes/IMPLEMENTATION-PATTERN-ASYNCHRONOUS_41848.aspx


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]

mardi 6 novembre 2007 à 19:28:56 | Re : BindingListView : déclancher le filtrage dans un thread

mathmax

J'ai un peu du mal avec ton code. Pourrais-tu me donner un exemple simplifié pour mon cas ?


Mathmax

****************************************


mercredi 7 novembre 2007 à 05:20:36 | Re : BindingListView : déclancher le filtrage dans un thread

mathmax

Ce code ne semble pas déclancher l'évenement MaMethodeCompleted dans le thread principal mais dans celui de ma méthode asynchrone. Donc si l'on abonne OnListChanged() à cet évenement, celle-ci ne s'exécutera pas dans le thread du formulaire.

Mathmax

****************************************




Cette discussion est classé dans : thread, value, filtrage, filter, thrfilter


Répondre à ce message

Sujets en rapport avec ce message

thread [ par bouleetbil ] Je cree un chat avec des sockets donc j'ai un thread qui tourne en fond de tache et qui recupere les messages. A partir de ce thread je peux recevoir multi thread [ par matt2 ] salut j'aurai besoin d'un renseignement!!!!j'ai créé un prog en multi thread. Chacun des deux thread fait appel à une file que j'ai déclaré dans ma cl Filtrage de caractère dans une textBox [ par Online ] Bonjour, je voudrais controler l'entrée de certains caractères dans une textBox et interdire l'utilisation de ces caractères\ / : * ? " |</t C# et EXCEL [ par Polop ] Bonjour,j'ai un soucis avec Excel et C#.j'ai trouvé divers bout de code pour lire un classeur excel avec .NET(C#) mais mon classeur ne veut pas se met Changement de langue d'un ColorDialog C# [ par Did69 ] Hello all,Voila mon probleme, lorsqu'on ouvre un ColorDialog, il utilise la langue de windows, en gros si windows est en francais tous les boutons son Changement de langue d'un ColorDialog C# [ par Did69 ] Hello all,Voila mon probleme, lorsqu'on ouvre un ColorDialog, il utilise la langue de windows, en gros si windows est en francais tous les boutons son Cookie avec asp.net & c# [ par aeled ] J'ai un problème de cookie :En fait je crée un cookie avec Response.Cookies["monCookie"].Value = "monPrenom"le cookie se crée bien mais je n'arrive pa Ajout d'un contrôle depuis un thread en utilisant Invoke... [ par gazous ] Bonjour,Je vous contacte car j'ai vu que vous étiez assez calé en dll.Mon problème :J'ai un thread qui essaye d'ajouter un contrôle dans un panel char Problème de thread, socket et form [ par Florynth ] Bon pas très compliqué,j'ai créé un thread qui écoute un portaprès je pèse sur un bouton qui fait connectédonc il créé un socket le connect au port en ouverture Fichier Xls : Ancien format ou bibliotheque de type non valide. [ par JCRen ] Bonjour a tous, je suis oqp a creer un system de reporting qui doit externaliser des informations d'une DB dans un fichier xls.Le probleme c'est qu'a


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.