2010-08-20 1 views
1

Voici mon problème: Je crée un module de téléchargement de produit (formulaire principal) en C#. Je lis les données des fichiers excell, puis les télécharge dans la base de données, puis je redimensionne les images et les télécharge via FTP. Tout fonctionne bien. Maintenant, je veux ajouter une barre de progression. J'ai fait un nouveau formulaire, j'ai ajouté deux barres de progression, et j'ai rendu les méthodes publiques pour donner une nouvelle valeur aux barres de progression, et une troisième méthode, pour sortir un texte lorsque vous avez terminé. Si je place une instance dans le formulaire principal, cela fonctionne, mais je fais des opérations difficiles (redimensionnement de l'image, chargement dans ftp) et le CPU ne peut pas tracer la barre de progression aussi vite qu'elle change. Donc la solution serait de démarrer le formulaire de progression dans un nouveau thread. J'ai essayé plusieurs façons de le faire mais sans succès. Le problème principal est que je devrais déclencher les méthodes publiques du formulaire de progression à partir du formulaire principal.C# Comment exécuter et gérer un formulaire dans un autre thread?

Je n'ai jamais fait de barre de progression en C# avant, pouvez-vous me dire s'il vous plaît quelle est la manière la plus simple et la plus simple de le faire?

Répondre

1

Je pense que peut-être vous feriez mieux d'effectuer les actions intensives dans le thread séparé, puis de ramener les événements à votre formulaire de progression afin d'afficher à l'utilisateur la progression. Lorsque vous avez des unités d'exécution séparées, vous ne pouvez pas simplement mettre à jour l'interface graphique de ces unités d'exécution. Vous devriez regarder en utilisant Invoke MSDN.

Cet exemple montre également un exemple simple de la façon dont vous pouvez utiliser un thread de travail pour effectuer vos tâches les plus intensives.

private void Button_Click(object sender, EventArgs e) 
    { 
    myThread = new Thread(new ThreadStart(ThreadFunction)); 
    myThread.Start(); 
    } 
    private void ThreadFunction() 
    { 
    MyThreadClass myThreadClassObject = new MyThreadClass(this); 
    myThreadClassObject.Run(); 
    } 
+0

merci. J'ai mis les actions intensives dans un nouveau fil. La barre de progression commence dans la partie principale, donc cela fonctionne parfaitement. – Ervin

Questions connexes