2010-03-16 6 views
0

J'ai un processus BackgroundWorker en plusieurs étapes. J'utilise une barre de progression de sélection parce que plusieurs de ces étapes sont exécutées sur un serveur iSeries, il n'y a donc aucun moyen de déterminer un pourcentage. Ce que j'envisage est une étiquette avec des mises à jour après chaque étape. Comment recommanderiez-vous de mettre à jour une étiquette sur un winform pour refléter chaque étape?Mise à jour d'un statut sur un Winform dans BackgroundWorker

Figuré J'ajouterais un peu plus. J'appelle certains programmes CL et RPG via une procédure stockée sur une iSeries (ou IBM i ou AS/400 ou un ordinateur milieu de gamme fonctionnant sous OS/400 ... er ... i5/OS (sacrément IBM pour ne pas garder le même nom année après année)).

Quoi qu'il en soit, je dois attendre que cette étape soit complètement terminée avant de pouvoir continuer du côté du winform. Je pensais envoyer des commentaires à l'utilisateur en donnant les principales étapes.

  1. données de dumping à iSeries
  2. Courir la fin du mois
  3. Création de rapports
  4. résultats finaux Téléchargement des

Je devrais probablement avoir donné cela au début. Désolé pour ça. J'essaie de garder mes questions assez générales pour que les autres puissent utiliser plus tard plutôt que ma tâche spécifique.

Répondre

1

Ceci est l'un des points d'un travailleur de fond en substance. Utilisez un ProgressBar et déterminez simplement la progression de la progression, en fonction de votre algorithme.

(Comme il a été mentionné précédemment, si elles sont 10% à travers, envoyer 10, si elles sont 50% à travers, envoyer 50)

L'utilisation d'un BackgroundWorker bgWrk

Ajouter l'événement suivant :

bgWrk.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(bgWrk_ProgressChanged); 
// Note: This method is invoked on the UI thread 

void bgWrk_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) 
{ 
    // Add progress to whatever UI element needs updating. The below simply uses a progress bar. 
    prog.Value = e.ProgressPercentage; 
} 

Après chaque étape importante que vous pensez mérite un utilisateur met à jour effectuer les tâches suivantes:

bgWrk.ReportProgress(intValue);

Quelques notes:

  • Vous pouvez passer un Object aussi bien dans la méthode ReportProgress(), alors vous seriez en mesure de mettre à jour une étiquette avec un objet chaîne etc, mais une barre de progression est toujours le symbole universel de "tenir, je fais quelque chose"

  • Si vous avez des sondages indéterminés, et que vous utilisez un ProgressBar, essayez de l'utiliser comme un ProgressBar indéterminé, ou un spinner ou autre. WPF a une propriété incorporée pour rendre une barre de progression indéterminée, ce qui est utile.

+0

une chose que vous avez omise Rozendo: l'événement ProgressChanged - cette méthode est-elle invoquée sur le thread de l'interface utilisateur ou sur le thread d'arrière-plan? – Cheeso

+0

Il va invoquer sur le thread de l'interface utilisateur.Il a été conçu pour pouvoir être utilisé avec ProgressBars en particulier. C'est pourquoi les EventArgs fournissent un pourcentage pour pouvoir accéder à cette fonctionnalité. –

0

Combien y-a-t-il d'étapes? S'il y a 10 étapes, utilisez simplement un marqueur d'augmentation de 10% pour la fin de chaque étape qui s'est terminée avec succès.

+0

Les étapes sur l'iSeries sont plus de 50% des étapes dont je ne peux pas communiquer à C#. Je suppose que je pourrais juste mettre à jour en pourcentage de toute façon. –

+0

oh .... iSeries comme dans le mainframe? ou des boîtes AIX? Je vais modifier cette réponse en conséquence ... – t0mm13b

+0

iSeries comme dans IBM i ou AS/400 ou un ordinateur milieu de gamme. Il exécute OS/400 et la logique appelée est en CL et RPG. Je dois l'appeler via une procédure stockée et je dois attendre jusqu'à ce qu'il se termine avec succès avant de pouvoir passer à l'étape suivante. –

Questions connexes