6

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?

2 Answers2

17

Thread.Start starts 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.BeginInvoke will 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.BeginInvoke invokes 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.BeginInvoke is a handy way to do that.

Dean Harding
  • 71,468
  • 13
  • 145
  • 180
2

See this question: differences in the different ways to make concurrent programs for more info on the differences between the various ways of running concurrent code in .net.

Community
  • 1
  • 1
Simon P Stevens
  • 27,303
  • 5
  • 81
  • 107