Procédure import dans une dll avec visu de progression sur une progressbar [Résolu]

Signaler
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
-
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
-
Hello,

j'ai un petit souci...

j'ai fait une dll d'importation (je sais y a DTS pour ca...mais pour des raisons techniques c'est ma dll que je dois utiliser)
bref...je fais ma petite dll, qui va lire mon fichier texte, decomposer les colonnes, faire l'insert dans la table qui va bien, generer un fichier log et s'il le faut un fichier d'erreur...
bref tout va bien...

par contre comme je fais des importations de fichiers faisant environ 500000 lignes c long et le sablier c'est pas beau...
du coup je me suis dit..dans ma dll je gere le nombre d'erreur, le total de ligne inserer, le nombre de ligne a traiter alors autant les recuperer et les afficher sur la fenetre qui appel ma dll.
j'ai donc créé des propriete nb_erreur, nb_insert, etc....qui me retourne tout mes chiffre.

dans le programme utilisant la dll, j'ai mis un timer avec evenement tick qui va interroger mes proprietes

private void timer1_Tick(object sender, System.EventArgs e)
{
long erreur = 0;
long insert = 0;
long total = 0;
long traite = 0;

if(T_DCMDCLT!=null)
{
erreur = T_DCMDCLT.Nb_Erreur ;
if(erreur!=0)
MessageBox.Show("ERREEUR");
insert = T_DCMDCLT.Nb_Insertion ;
total = T_DCMDCLT.Nb_Total ;
traite = T_DCMDCLT.Nb_Traite ;
}

//On met a jour la progressbar
if(total!=0)
{
progressBar1.Value = Convert.ToInt16( (traite/total)*100 );
}
lbl_erreur.Text= "Erreur : "+erreur.ToString();
lbl_insert.Text= "Insert : "+insert.ToString();
lbl_total.Text = total.ToString();
lbl_traite.Text = traite.ToString();
}


avant ca mon programme lance l'importation grace à une fonction de ma dll

T_DCMDCLT.Lance_Importation();


mais la je ne rentre jamais dans le tick du timer...
une fois l'importation lancer...impossible de récuperer les valeurs de mes champs et donc de faire bouger ma progressbar....

Application .doEvents() qui manque ?????

si kkun a une idée...

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."

4 réponses

Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
ca roule avec le multi thread


using System.Threading;
......

private Thread thread = null;
............

ThreadStart threadStart = new ThreadStart(Lance_import_DCMDCLT);
thread = new Thread(threadStart);       
thread.Start();   

}

private void Lance_import_DCMDCLT()
{
T_DCMDCLT.Lance_Importation();
}


et dans le tick de mon timer j'interoge mon T_DCMDCLT.nb_erreur etc.....

et ca marche :o)))))

encore merci

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
si tu utilises le Timer de System.Windows.Forms et que ta methode est bloquante il me semble qu'il est dans les choux tant que ta methode n'a pas fini de s'executer
donc il faut peut etre executer ta methode dans un thread séparé, de cette manière le gui et son timer ne seront pas freezés

Cocoricoooooooo !!!!
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
mouais je craignais une reponse de ce genre... :o)))

bah on va tenter de faire du multithread...alors :o)))
Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
13
merci coq

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."