class MyThread { private int executeInterval = 15; public int ExecuteInterval { get { return this.executeInterval; } set { this.executeInterval = value; } } private int checkFlagInterval = 1; public int CheckFlagInterval { get { return this.checkFlagInterval; } set { this.checkFlagInterval = value < 1 ? 1 : value; this.checkFlagInterval = value > this.executeInterval ? this.executeInterval : value; } } private bool flag = true; public bool Flag { get { return this.flag; } set { this.flag = value; } } public void Run() { int timeout = 0; while (this.flag) { if ((timeout -= checkFlagInterval) < 1) { // do something timeout = this.executeInterval; } Thread.Sleep(this.checkFlagInterval * 1000); } } } class Program { static void Main(string[] args) { MyThread myThread = new MyThread(); Thread thread = new Thread(new ThreadStart(myThread.Run)); thread.Start(); while (myThread.Flag) { myThread.Flag = Console.Read() != 'q'; } } }