Procédure import dans une dll avec visu de progression sur une progressbar

Résolu
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 - 8 juil. 2004 à 16:22
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 - 8 juil. 2004 à 17:45
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

Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
8 juil. 2004 à 17:45
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..."
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 juil. 2004 à 16:37
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 !!!!
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
8 juil. 2004 à 16:43
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..."
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
8 juil. 2004 à 16:44
merci coq

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
0
Rejoignez-nous