They do not match.
A call to new ThreadStart(SomeMethod).Invoke() will execute the method in the current thread using late binding. This is much slower than new ThreadStart(SomeMethod)() , which in turn is slightly slower than SomeMethod() .
Calling new Thread(SomeMethod).Start() will create a new thread (with its own stack), run the method on the thread, and then destroy the thread.
A call to ThreadPool.QueueUserWorkItem(delegate { SomeMethod(); }) (which you did not mention) will start the method in the background in the thread pool, which is a set of threads automatically managed by .NET on which you can run the code. Using ThreadPool is much cheaper than creating a new thread.
A BeginInvoke call (which you also did not mention) will also run the method in the background in the thread pool and save the result information of the method until you name EndInvoke . (After calling BeginInvoke you should call EndInvoke )
In general, the best option is ThreadPool.QueueUserWorkItem .
SLaks
source share