Bonjour, Je charge des donnees d'une base dans un dataset ,le traitement est assez lourd. Pour ne pas que l'utilisateur pense que l'appli ne repond pas j'ai essayé d'integrer une Progressbar ca fait 2 semaines que je planche sur le sujet. Mais là je n'ais plus de visibilité et je m'en mêle les pinceaux.
Voila où j'en suis: L'importation des données se fait au clique d'un bouton.
Voici mon code:
// Le traitement dasn le Thread(base de donnees -> Datagridview)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // Le bouton private void Bt_exp_Click(object sender, EventArgs e) { this.DgResultat.DataSource = null; Thread t = new Thread(new ThreadStart(ThreadMethod)); t.Start(); }
// La progressbar
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 private void actualiser_dg(){ MonDataAdapter.Fill(ds, flux); DgResultat.DataSource = ds.Tables[flux].DefaultView; foreach (DataGridViewRow currentRow in DgResultat.Rows) { currentRow.Selected = false; if (currentRow.IsNewRow == false) { //Traitement lourd... } Show_ProgressBar(); } MyProgressBar.ReInit(); }
// La méthode appelé dans le thread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 private void Show_ProgressBar() { if (InvokeRequired) //si on n'est pas dans le thread principal { Invoke(new progress(Show_ProgressBar)); } else{ MyProgressBar.Max = DgResultat.RowCount; MyProgressBar.PerformSteps(); } }
La progressbar evolue bien pendant le chargement mais ralentie considerablement le temps de chargement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private void ThreadMethod() { this.Invoke(new progress(actualiser_dg)); }
Partager