Multi-threading does not and cannot work like that. There are two basic, widely-used approaches when it comes to multi-threading; fire-and-forget or thread pool. Fire-and-forget is for when you you have long-running, stand-alone tasks that will interact with other parts of your program, such as the UI, while maintaining program responsiveness. A thread pool is best utilized when there will be a lot of tasks, in any order and/or repeatable, that will take longer than a few milliseconds such as successive database access or network communications. It maintains a pool of threads that can be triggered to run code but doesn't give the thread resources back to OS when the thread returns.
Once a thread begins to run down a line of program execution, it cannot be stopped unless you manually code in stop points. This can be done but it is not recommended as it causes a myriad of synchronization problems. The ability to start and stop threads mid-execution is a System Kernal level control.
A thread pool is closest to what you want to achieve but you cannot arbitrarily stop them.
MSDN ThreadPool class[
^]