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.