Created
February 10, 2016 19:20
-
-
Save Fresh-Dev/7358e1c0784b45a2bb2a to your computer and use it in GitHub Desktop.
Variable amount of BackgroundWorker Threads
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private BackgroundWorker[] Workers; | |
private int MaxWorkers = 10; | |
private Queue<string> Clients = new Queue<string>(); | |
private void _StartNewClient(BackgroundWorker bw) | |
{ | |
if (Clients.Count > 0) | |
{ | |
string md5nummer = Clients.Dequeue(); | |
Debug.WriteLine("Starting " + md5nummer); | |
bw.RunWorkerAsync(md5nummer); | |
} | |
if (Clients.Count == 0) | |
{ | |
} | |
} | |
//BackgroundWorker ~> Task | |
private void bw_DoWork(object sender, DoWorkEventArgs e) | |
{ | |
Debug.WriteLine("Working " + e.Argument.ToString()); | |
~DO SMTH | |
Debug.WriteLine("Worker # " + e.Argument.ToString()); | |
e.Result = e.Argument.ToString(); | |
} | |
//Background-Worker-Finished | |
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) | |
{ | |
solved++; | |
if (Clients.Count > 0) | |
{ | |
Debug.WriteLine("Completed " + e.Result); | |
_StartNewClient((BackgroundWorker)sender); | |
} | |
if (Clients.Count == 0) | |
{ | |
bool isAnyBusy = true; | |
for (int i = 0; i < MaxWorkers; i++) | |
{ | |
if (Workers[i].IsBusy != true) | |
{ | |
isAnyBusy = false; | |
} | |
else { isAnyBusy = true; } | |
} | |
if (!isAnyBusy && !finishesMsgShown) | |
{ | |
finishesMsgShown = true; | |
} | |
} | |
} | |
//Start Event | |
private void button2_Click(object sender, EventArgs e) | |
{ | |
MaxWorkers = int.Parse(numericUpDown1.Value.ToString()); | |
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) | |
{ | |
Clients.Enqueue(i.ToString()); | |
Debug.WriteLine("Added: " + i.ToString()); | |
} | |
Workers = new BackgroundWorker[MaxWorkers]; | |
for (int i = 0; i < MaxWorkers; i++) | |
{ | |
Workers[i] = new BackgroundWorker(); | |
Workers[i].WorkerSupportsCancellation = true; | |
Workers[i].DoWork += new DoWorkEventHandler(bw_DoWork); | |
Workers[i].RunWorkerCompleted += new | |
RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); | |
_StartNewClient(Workers[i]); | |
} | |
Debug.WriteLine("Finished Click handler"); | |
} | |
]]></Code> | |
</Snippet> | |
</CodeSnippet> | |
</CodeSnippets> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment