Difference between BeginInvoke and Thread.Start Difference between BeginInvoke and Thread.Start multithreading multithreading

Difference between BeginInvoke and Thread.Start


BeginInvoke will post the action in the message queue of the message pump on the same thread as the Form, it will not create a new thread.

Control.BeginInvoke behaves similar to an asynchronous thread start, but has important internal differences.

Read in further detail an article here.


BeginInvokes executes the delegate asynchronously on the UI thread (which is why it hangs the UI), by posting a message to the window. That's what you need to do if the code in the delegate accesses the UI.

The approach with Thread.Start executes the delegates on a new, independant thread.


Thread.Start runs it on your new Thread.

Control.BeginInvoke runs the method on the thread that the Control this belongs to. If you are currently on the thread of the control, the method is not run until you return control to the message loop, e.g. exit your event handler.