Skip to content

Instantly share code, notes, and snippets.

@Fresh-Dev
Created February 10, 2016 19:20
Show Gist options
  • Save Fresh-Dev/7358e1c0784b45a2bb2a to your computer and use it in GitHub Desktop.
Save Fresh-Dev/7358e1c0784b45a2bb2a to your computer and use it in GitHub Desktop.
Variable amount of BackgroundWorker Threads
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