private void buttonStart_Click(object sender, EventArgs e) { (new Thread(new ThreadStart(() => { while (!ThreadStop) { System.Threading.Thread.Sleep(3000); DoTask(); } } ))).Start(); } private void buttonStop_Click(object sender, EventArgs e) { ThreadStop = true; } void DoTask() { if (InvokeRequired) { BeginInvoke(new MethodInvoker(DoTask)); return; } progressBar1.Value++; }