Modifier un form à partir d'un thread secondaire (MethodInvoker)
Bonjour,
Je cherche à faire évoluer une ProgressBar lors du téléchargement d'un fichier.
Le problème, c'est que je n'ai pas la main sur le téléchargement (je télécharge sur un serveur SFTP en utilisant la librairie SharpSSH).
Pour faire évoluer ma progressBar, je connais la taille totale du fichier et le nombre d'octet déjà transférer. J'utilise un thread qui toute les demi secondes fait évoluer ma progressBar. Le problème c'est que je ne peux pas modifier ma progressBar directement dans ce thread.
Voilà mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public class InterfacePrincipale : System.Windows.Forms.Form
{
...
private void BVerifierDonneesFTP_Click(object sender, EventArgs e)
{
Thread lThreadTelechargement = null;
//On lance la vérification
this.LabelVerification.Text="Téléchargement de l'archive ZIP";
this.LabelVerification.ForeColor = Color.Blue;
this.BVerifierDonneesFTP.Text = "Annuler";
lThreadTelechargement = new Thread(new ThreadStart(this.progressBarEvolution));
lThreadTelechargement.Start();
//Méthode téléchargant le fichier sur le serveur SFTP
this.lVerificationDonneesFTP.telechargement();
lThreadTelechargement.Abort();
...
}
...
private void progressBarEvolution()
{
Thread.Sleep(500);
while (this.lVerificationDonneesFTP.enTelechargement)
{
Thread.Sleep(500);
this.BeginInvoke((MethodInvoker)delegate
{
this.PBTempsVerification.Value = (int)((this.lVerificationDonneesFTP.getQuantiteTelecharge() / this.lVerificationDonneesFTP.getTailleTotale()) * 100);
});
}
} |
Bien sur ça ne fonctionne pas! :calim2:
Je pense que le problème vient de l'utilisation du "MethodeInvoker". J'ai saisie l'utilité mais pas vraiment le fonctionnement.
Si quelqu'un pouvait m'éclairer un peu ça serait sympa.
Merci d'avance
Cordialement,
Denethor9