Я бы не стал использовать реестр для чего-то подобного. Вы хотите уведомить рабочий поток о том, что пора выходить, и позволить ему выйти самостоятельно, но вы можете сделать это лучше, чем использовать реестр.
Используйте переменную bool "keepRunning" вместо использования реестра. Имейте параметр / переменную "workInterval", который указывает, как часто следует выполнять работу, но установите достаточно короткий интервал сна, скажем, каждые несколько секунд, для пробуждения и проверки переменной "keepRunning" достаточно часто, чтобы служба могла реагировать на останов команда. Если тест keepRunning ложен, просто выйдите из основного цикла, и ваш процесс обслуживания завершится. Если «keepRunning» имеет значение true, то проверьте, пора ли выполнять работу, выполнить работу, если пришло время, а затем снова уснуть. Если работа длится долго, попробуйте периодически проверять переменную keepRunning из своего рабочего цикла, чтобы вы могли сохранить состояние и корректно выйти, если служба должна была завершиться.
Ваш обработчик OnStop просто установит «keepRunning» в false и больше ничего не будет делать. Таким образом, вам не нужно принудительно убивать работника чем-то вроде Thread.Abort, и сервисный процесс будет остановлен в течение нескольких секунд после события OnStop.