I have written a C# Windows Forms application, not a service (it is only used when the user is logged in and has a graphical user interface) that has a background thread run
You call that thread a "background thread" but does it have IsBackground = true; ? The system will only stop a thread that does.
IsBackground = true;