Когда вы нажимаете кнопку «Пуск», код, который запускается и печатает числа, будет выполняться в потоке пользовательского интерфейса. (из вашего объяснения я предполагаю, что все, что у вас есть, - это обработчик сообщений для события нажатия кнопки и ничего более. Например: не настраивать отдельный поток.).
Запуск бесконечного l oop на Пользовательский поток означает, что у вас больше нет времени на обработку других сообщений. (поток, отвечающий за обработку сообщений пользовательского интерфейса, застрял в вашем бесконечном l oop.)
Итак, чтобы иметь возможность нажать кнопку «Стоп», вам нужно запустить код с бесконечный l oop в другом потоке или в другом процессе. Это то, что Арджун пытается тебе сказать. (если вы хотите, чтобы код в бесконечной l oop обращался к ресурсам из вашего приложения формы, вам нужен поток. [поток находится внутри процесса приложения форм.])
обратите внимание: если вы создаете нить и запустите свой код печати номера внутри этой нити, это не будет нить пользовательского интерфейса. Таким образом, вы не сможете взаимодействовать с элементами управления формами, как если бы вы были в потоке пользовательского интерфейса. (то есть: попытка установить windows .text для отображения ваших номеров, скорее всего, приведет к исключению.)