+3  A: 

Yes.

And if you provide more information, we can provide more detail in the answer.

In general, you set up a communication system (a message queue, Event, or delegate) that is used to signal that a process/step/thread is done. When that happens, start up the next thread.

John Fisher
+1 for Captain Obvious. =)
David Lively
+4  A: 

Sure. Have the first thread launch the second thread, or set some sort of flag telling the hosting app to start the second thread. Of course, I have to ask: if these threads always run sequentially, why create a second thread at all instead of performing all of your work in the first thread?

David Lively
"why create a second thread at all" - This is typically true, unless the second thread can do *some* processing prior to the first's completion. Sometimes, you can do half of your work, but need to wait for results, etc...
Reed Copsey
+4  A: 

In .NET 4, you can use Task instead of threads, and then use continuations to achieve your goals:

var firstTask = Task.Factory.StartNew( () => PerformSomeLongRunningAction(); );

var secondTask = firstTask.ContinueWith( t => PerformSecondAction(); );

In .NET <=3.5, the options vary. The best is often to use a WaitHandle to signal your second task. The first background thread will need to signal the wait handle when it's complete:

var mre = new ManualResetEvent(false);

ThreadPool.QueueUserWorkItem( o =>
      {
           PerformSomeLongRunningAction();
           mre.Set(); // Signal to second thread that it can continue
      });

ThreadPool.QueueUserWorkItem( o =>
      {
           mre.WaitOne(); // Wait for first thread to finish
           PerformSecondAction();
      });
Reed Copsey
I just learned something; today won't be a total waste after all!
David Lively
@David: That's nice to hear ;)
Reed Copsey
@Reed are the created tasks running in a separate thread? It looks like this may just be a more friendly wrapper around the `Thread` stuff.
David Lively
@David: Typically, yes. By default, Tasks are created on threadpool threads. They provide a lot of advantages, though, especially when working with GUIs, creating MANY tasks, etc - to learn more, see: http://reedcopsey.com/series/parallelism-in-net4/
Reed Copsey
@Reed Awesome. Thanks for the link.
David Lively