begin process at 2012 02 11 18:20:32
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Autre

 > 

BindingListView : déclancher le filtrage dans un thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

BindingListView : déclancher le filtrage dans un thread

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ée 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,151 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales