ThreadPool = best used in situations where you don't need control over the thread.
Thread = good for when you need full control over the thread and its execution.

That's the main difference. Which one you should use depends on what needs to be done.

Edit @ jay:
A Ping application should always be sequential. Otherwise you'll have inaccurate results. That's why all ping apps do one ping at a time.
Hyperz Reviewed by Hyperz on . [C#] AutoResetEvent Freezing application! using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.NetworkInformation; Rating: 5