Existing related questions here talk about differences between:
- Delegate.BeginInvoke and Control.BeginInvoke
- Control.BeginInvoke and Thread.Start
But what are the differences between Delegate.BeginInvoke and Thread.Start?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Thread.Startstarts a new OS thread to execute the delegate. When the delegate returns, the thread is destroyed. This is quite a heavy-weight operation (starting and destroying a thread) so you typically only do it if the method is going to be long-running.Delegate.BeginInvokewill call the delegate on a thread pool thread. Once the method returns, the thread is returned to the pool to be reused by another task. The advantage of this is that queueing a method to the thread pool is relatively light-weight because you don’t have to spin up a whole new thread every time.Control.BeginInvokeinvokes the method on the thread for the control. UI components are inherently single-threaded and every interaction with a UI control must be done on the thread that created it.Control.BeginInvokeis a handy way to do that.