Single Threading: This is the simplest and most common threading
model where a single thread corresponds to your entire application’s
process.
Apartment Threading (STA): This allows multiple threads to exist in a
single application. In single threading apartment (STA), each thread
is isolated in it’s own apartment. The process may contain multiple
threads (apartments) however when an object is created in a
thread (i.e. apartment) it stays within that
apartment. If any communication needs to occur between different
threads (i.e. different apartments) then we must marshal the first
thread object to the second thread.
Free Threading: The most complex threading model. Unlike STA,
threads are not confined to their own apartments. Multiple treads can
make calls to the same methods and same components at the
same time.