Mise à jour ProgressBar dans une autre fenêtre à partir d'une fonction?
J'ai une Tâche de Fond qui télécharge un fichier, et je veux un rapport sur le progrès d'une barre sur un autre formulaire. Comment pourrais-je aller à ce sujet? Je suis un peu novice en C# mais longtemps VB .net programmeur.
J'ai été déconner avec ce code, mais il est totalement faux.
System.Windows.Forms.Form progForm = new ProgressWindows();
Control[] ctrls = progForm.Controls.Find("fileProgress1", true);
- Winform application? Voulez-vous montrer le pourcentage exact? Avez-vous aucun moyen de savoir le pourcentage? Aimeriez-vous utiliser BacgroundWorker? Désolé pour les nombreuses questions 🙂
- Je n'ai, en fait. Son un MME VSTO le plugin Outlook. Mais en cours de transfert, j'utilise percentageComplete = (int)(totalReadCount / (double)taille * 100); et je reçois un simple 1 à 100 progrès. J'ai testé ce par messagebox.
InformationsquelleAutor Dan C. | 2011-09-04
Vous devez vous connecter pour publier un commentaire.
Si vous le problème est juste que l'accès à la fileProgress1. La solution la plus simple est de le rendre public dans le ProgressWindow classe. Par défaut, les contrôles sont privés.
Ensuite, vous pouvez accéder à la fileProgress1 de contrôle ci-dessous.
Cependant, la meilleure façon est d'exposer une méthode publique dans le PrefressWindows classe de mise à jour des progrès.
Dans le ProgressWindows Classe
Appel de la méthode ci-dessus comme ci-dessous.
Si vous utilisez un BackgroundWorker puis il suffit d'appeler ReportProgress. Sinon, vous aurez besoin pour l'envoi de l'INTERFACE utilisateur de changer pour le bon thread. En WinForms voir le De contrôle.InvokeRequired de la propriété et des méthodes connexes. WPF équivalent est DispatcherObject.VerifyAccess.
Edit: Visual Studio n'est pas en face de moi, donc il peut y avoir quelques petites erreurs de compilation.
FindControl
passer le contrôle de barre de progression pour leTask
's du constructeur ou de passer à une méthode qui a l'accès.Je suis en supposant que votre deuxième forme (celui que vous voulez montrer des progrès dans l') est instancié dans la forme de faire de la "tâche". Pourquoi ne pas vous suffit de créer une méthode publique dans la deuxième forme que si l'on excepte un paramètre entier pour mettre à jour la barre de progression de la valeur? Semble relativement facile solution.