2011-01-27 10 views
6

Szybkie pytanie - czy można mieć jednocześnie dwóch pracowników działających w tle? Wydaje mi się, że próbowałem tego raz i otrzymałem błąd, a także wydaje mi się, że pamiętam, że możesz mieć tylko jeden ... Nie mogę znaleźć innego wątku, który mówi o posiadaniu więcej niż jednego, ale ..Wiele prac tła + C#

Dowolny myśli są doceniane!

Cheers

Odpowiedz

18

Możesz mieć jak najwięcej pracowników tła, jak chcesz i działa jednocześnie. Przykład:

var worker1 = new BackgroundWorker { WorkerReportsProgress = true }; 
var worker2 = new BackgroundWorker { WorkerReportsProgress = true }; 
DoWorkEventHandler doWork = (sender, e) => 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     var progress = (int)((i + 1) * 100.0/10); 
     var worker = (BackgroundWorker)sender; 
     worker.ReportProgress(progress); 
     Thread.Sleep(500); 
    } 
}; 
worker1.DoWork += doWork; 
worker2.DoWork += doWork; 
worker1.ProgressChanged += (sender, e) => 
{ 
    label1.Text = e.ProgressPercentage.ToString(); 
}; 
worker2.ProgressChanged += (sender, e) => 
{ 
    label2.Text = e.ProgressPercentage.ToString(); 
}; 

worker1.RunWorkerAsync(); 
Thread.Sleep(1000); 
worker2.RunWorkerAsync(); 
+0

Dlaczego nie utworzyć oddzielnych delegatów doWork dla worker1 i worker2? – CACuzcatlan

+0

Dla przykładu nie było to konieczne. – MadBoy

+0

Dzięki za przykład jako zdjęcie –