2009-11-16 3 views
1

S'il vous plaît pourriez-vous me donner vos pensées sur les points suivants (surtout si son conseillé ou non de le faire) ...Winforms en utilisant BackgroundWorker pour faire défiler Datatable

Fondamentalement, je peux importer des données CSV avec succès dans un datatable et Puis liez cette datatable à un datagridview. Ce que je voudrais faire maintenant, c'est effectuer des contrôles de validation pour chaque ligne de la grille. Chaque rangée aura ses données validées à travers une procédure stockée qui fera un tas de vérifications et retournera l'une des deux valeurs. Je voudrais ensuite afficher cette valeur dans la dernière colonne (à l'origine vide) de la grille, puis passer à la ligne suivante et répéter cette action jusqu'à ce que toutes les lignes aient été validées. J'espère que cela brosse un tableau clair de mes intentions. Afin de mettre à jour l'interface utilisateur, je voudrais utiliser utiliser le composant BackgroundWorker, mais je suis juste préoccupé par le fait que ce n'est peut-être pas la bonne façon de procéder, et surtout comment faire à ce sujet.

S'il vous plaît me conseiller. Merci!

Répondre

1

Pour une opération longue, un travailleur d'arrière-plan est le meilleur moyen d'effectuer une longue tâche sans provoquer le blocage de l'interface graphique.

Vous pouvez utiliser l'événement ProgressChanged pour mettre à jour le DataGrid. Notez que vous devrez mettre à jour le DataGrid à l'aide de la méthode Invoke, car GUI doit être mis à jour à partir du thread approprié et Invoke transfère votre action du thread du BG au thread de l'interface graphique.

+0

Cool! merci Am! J'ai essayé de bricoler avec le composant BGW avant, mais j'ai abandonné (pour une raison quelconque). Laissez-moi essayer encore et revenir à vous. En outre, l'utilisation d'un composant BGW serait-elle la solution pour les transactions de base de données? J'ai vu des opinions différentes à ce sujet, mais l'application que je crée est distribuée sur le réseau d'une entreprise, où il y a forcément une certaine latence de réseau. – Shalan

+0

À mon avis, toute opération qui prend plus de temps que 2 secondes doit être une opération de fond avec une indication d'interface utilisateur appropriée que quelque chose se passe. – Amirshk

+1

@Shalan Je recommande de regarder SynchronizationContext et la méthode Post ainsi que de conseiller d'utiliser BeginInvike au lieu de Invoke si SynchronizationContext ne va pas être utilisé. –

Questions connexes