Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 2011
-
17 janv. 2005 à 10:02
Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 2011
-
17 janv. 2005 à 11:27
Salut tout le monde,
j'ai une petite question concernant les threads....
Voila le contexte, j'ai un objet herite d'un datagrid qui permet de charger des données en parametrant 2 trois proprietes directement dans le mode design et en lancant une fonction...
en fait j'ai 2 select possible, un qui sera execute normalement (ie dans le thread principale de l'appli) qui permettra d'afficher un certain nombre de ligne tout de suite, le 2eme select est la lui pour remplir le reste du datagrid je m'explique, j'ai une table de 200 000 lignes, si je charge tout a partir du thread de l'appli ca rame, donc mon premier select charge les 1000 premieres lignes et le 2eme select (qui sera lancer dans un thread différent) charge les 199 000 autres lignes comme ca l'utilisateur a l'impression que c charger alors que ca continu a bosser derriere :o)
seulement voila....
g donc une méthode qui me lance le premier select affiche le resultat, et lance dans un 2eme thread l'autre select...
a un moment g vu qu'il fallait faire un thread.Abort() ou un truc du style...
pour arreter le thread...
a priori ca le fait ...mais si je ferme la fenetre et que je relance...pouf ca plante...erreur de memoire, jamais la meme erreur...la fete...
par contre si je bloque le 2eme select he ben pas de pb (car a mon avis pas de thread en +)
je lance la fenetre autant de fois que je veux...
une idee...
l'interet de faire un thread.sleep(..)
thread.join()??????
Help....
Arthenius
"Il n'y a pas de mauvais développeurs,...
mais uniquement de mauvais utilisateurs..."
Arthenius
Messages postés1182Date d'inscriptionmercredi 21 janvier 2004StatutMembreDernière intervention 6 septembre 201114 17 janv. 2005 à 10:34
heuuu...
en fait le premier select je le fais pas dans un thread a part (enfin celui de l'appli mais rien de plus)
par contre le "gros" select est fait dans un thread a part pour pas bloquer l'appli...
donc d'apres toi je lance mon thread...et apres je fais un join...
a ce moment je sais que le thread est fini....
mais y a qd meme kkchose que je comprend pas...si je fais un thread.abort() je suis censer terminer mon thread, alors pkoi ca pose probleme qd je ferme et relance la forme ???
?.?????????????????
Arthenius
"Il n'y a pas de mauvais développeurs,...
mais uniquement de mauvais utilisateurs..."
ivanoff1
Messages postés99Date d'inscriptionlundi 14 octobre 2002StatutMembreDernière intervention28 décembre 2005 17 janv. 2005 à 10:41
Désolé jme suis trompé!
En fait tu vas bloquer ton deuxième thread tant que le premier n'a pas fini son chargement.
La méthode "abort" permet d'arrêter complètement le thread ( et de le détruire après => GC)
Tu peux soit utiliser l'événement "Mutex" ou alors utiliser le mot clé "lock"
Genre :
lock (valeur)
{
// traitement
}
Dans le lancement de ton programme, tu dois utliser le "join", il permet d'attendre qu'un autre Thread ait fini son exécution avant de commencer le sien.
Après dans ta classe, il faut utiliser faire :
lock(this)
{
try
{
Monitor.Wait (this); // attendre le Monitor.Pulse d'un autre thread
}
}
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 17 janv. 2005 à 10:59
Il me semblait que la classe Monitor servait a gérer les accés
concurrents ? Ca n'a pas l'air d'etre le cas ici, si ? Les 2 threads
accédent a des ressources différentes.
La seule chose qu'on en commun les 2 threads, ce se le datagrid pour le
remplissage final. Et Arthenius dit qu'il lance le 2eme thread une fois
que le premier est fini. Donc ils n'essaient pas de remplir le datagrid
en meme temps, a priori le probleme ne vient pas de la.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 17 janv. 2005 à 11:22
Déjà le fait d'accéder à un contrôle depuis un autre thread que celui qui l'a crée n'est pas trop conseillé.
Pour ce qui est de l'accès concurrent : si l'utilisateur fait scroller le contrôle (par exemple) alors que tu es encore en train d'y ajouter tes items, il y a des risques là :-)