2010-03-10 6 views
7

Ich habe ein Formular, das viele Long-Methoden hat. Meine Aufgabe ist: Was ist die beste Praxis? Verwenden Sie die anonyme Methode und nur einen Hintergrund-Worker oder erstellen Sie eine Instanz von BackgroundWorker für jede Long-Methode.Best Practice für mehrere lange Methoden mit Backgroundworker

Bitte helfen. Vielen Dank.

+0

Lange wie in Zeilen des Codes oder Long als in Long Running? –

+0

lang wie auf lange Sicht. – wallybh

Antwort

2

Ich würde persönlich eine Instanz von BackgroundWorker für jede Ihrer Aufgaben verwenden. Beachten Sie jedoch, dass Sie die Delegate-Methode mehrmals in mehreren verschiedenen Thread-Instanzen aufrufen können.

Mit einem BackgroundWorker pro lange-Methode Aufgabe haben Sie viel Kontrolle über Ihre Methoden. Außerdem ist meines Wissens nach eine Instanz eines BackgroundWorker mit dieser Hintergrundaufgabe beschäftigt und macht sie für andere nicht verfügbar. Vielleicht irre ich mich, aber das ist sowieso die Art und Weise, wie ich es tun würde, da Ihr DoWork() - Event-Handler nur das tun kann, was er für diesen BackgroundWorker tun soll. So scheint es mir unmöglich, für nur eine Instanz von BackgroundWorker völlig unterschiedliche Aufgaben zu erledigen.

Hilft das?

+0

Ja, diese Hilfe. Meine Long-Methoden haben keine fortlaufenden Läufe. Ich werde deine Empfehlung verwenden. Sorry für schlechtes Englisch ... – wallybh

+1

Mach dir keine Mühe, ich bin frankophon! = P Hehehe ... –

+1

Vielleicht würde das helfen, wenn Sie Ihre long-as-in-long-running-Methode aufteilen;) in mehrere kleinere Teile zerlegen und die Teile in andere multiple BackgroundWorker zerlegen. Es hängt alles davon ab, ob diese Methoden in kleinere Codeabschnitte hineingekaut werden können, wenn Sie sehen, was ich meine. –

2

Zusammengefasst:

Vorteile in einem Background:

  1. Sie steuern die Reihenfolge der Ausführung für die mehrere Verfahren. Dies ist jedoch auch ein Nachteil, denn wenn Sie mehrere BackgroundWorker verwenden, nehmen Sie an, dass sie parallel ausgeführt werden und sich nicht um die Reihenfolge kümmern müssen.

  2. Weniger Overhead für Thread-Erstellung und Entsorgung (wenn möglich, verwenden Sie immer die gleiche Instanz, aber das ist nicht immer möglich, je nachdem, was den Prozess startet. Es ist nicht möglich, wenn Sie es gleichzeitig tun möchten);

  3. Wenn Sie zwischen Threads kommunizieren möchten, können Sie eine Batch-Kommunikation ansammeln und effizienter durchführen. Darüber hinaus können Sie einige dieser Kommunikation speichern, wenn alle Methoden in demselben Thread ausgeführt werden.

Vorteile in mehreren BackgroundWorkers:

  1. Die zuvor erwähnte Parallelität;

  2. Jedes Prozessende kann einen anderen Delegaten verwenden und daher eine andere Operation ausführen.

Hoffe es hilft!