2010-04-08 3 views
1

je dois initialiser quelques objets, il peut prendre un certain temps donc je veux le faire dans un fil d'arrière-plan. Je veux aussi afficher progressBar montrant quelle est la progression de l'initialisation.
Quelle est la manière la plus élégante de le faire?Initialisation des objets en arrière-plan

Je pensais à une interface:

interface ILoadable 
{ 
    int Progress { get; } 
    event EventHandler Loaded; 
} 
+2

Je pense que vous auriez également besoin d'un événement ProgressChanged. – overslacked

Répondre

8

Pourquoi ne pas simplement utiliser un BackgroundWorker directement? Il fournit des événements pour DoWork, ProgressChanged et RunWorkerCompleted.

L'avantage de cette (ou une enveloppe mince sur ce sujet) est que vous obtenez automatiquement le filetage manipulé pour vous, correctement, et il est très bien testé.

Si vous voulez contourner ce problème, je vous recommande de créer vous-même une classe abstraite qui encapsule BackgroundWorker et vous permet de fournir des délégués Action pour l'opération d'exécution.

+0

C'était rapide. BackgroundWorker est exactement ce que je cherchais. Merci. –

+0

+1 Il capte également les exceptions et les ramène au fil d'interface utilisateur pour vous, très utile! –