i many time call method with the help of thread like
static void Main( string[] args )
{
Thread t = new Thread( MyFunction );
t.Start();
}
static void MyFunction()
{
//code goes here
}
and some time i use ThreadPool
class also like
System.Threading.ThreadPool.QueueUserWorkItem(delegate {
MyFunction();
}, null);
but i do not understand what is the difference between calling any method with the help of thread class or ThreadPool
class
so i am looking a good discussion about what is the difference between Thread & ThreadPool
class.also need to know when we should use Thread class to call a method and when ThreadPool
class to call any method ? if possible discuss also with sample code with sample situation.
another very important question is that if i start multiple thread then my application performance will become low or bad ? if yes then tell me why...?
now also tell me what is BackgroundWorker
class and how it is different from Thread & ThreadPool
class. how far i heard that BackgroundWorker
class also create a separate thread to run any method. so please discuss how it is different from Thread & ThreadPool
class and when one should go for BackgroundWorker
class.
here is small sample code of BackgroundWorker
private void button1_Click(object sender, EventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
// this allows our worker to report progress during work
bw.WorkerReportsProgress = true;
// what to do in the background thread
bw.DoWork += new DoWorkEventHandler(
delegate(object o, DoWorkEventArgs args)
{
BackgroundWorker b = o as BackgroundWorker;
// do some simple processing for 10 seconds
for (int i = 1; i <= 10; i++)
{
// report the progress in percent
b.ReportProgress(i * 10);
Thread.Sleep(1000);
}
});
// what to do when progress changed (update the progress bar for example)
bw.ProgressChanged += new ProgressChangedEventHandler(
delegate(object o, ProgressChangedEventArgs args)
{
label1.Text = string.Format("{0}% Completed", args.ProgressPercentage);
});
// what to do when worker completes its task (notify the user)
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
delegate(object o, RunWorkerCompletedEventArgs args)
{
label1.Text = "Finished!";
});
bw.RunWorkerAsync();
}