Правильная остановка потоков - C#

Узнай цену своей работы

Формулировка задачи:

нужно правильно остановить потоки(на кнопку стоп(!)), чтобы они завершились и можно было закрыть программу без прерывания. так создаю потоки:
private void start_Click(object sender, EventArgs e)
        {
                for (int i = 0; i <= threads.Value; i++)
                {
                    Thread th = new Thread(new ThreadStart(this.Regging));
                    th.IsBackground = true;
                    th.Start();
                }
            
        }
сама функция:
private void Regging()
        {
            try
            {
                using (var request = new HttpRequest())
                {
                    бла бла бла              
                }
            }
            catch
            {
 
            }
            finally
            {
                Regging();
            }
        }
пытался через

th.Join();

, но так не выходит( нужно как-то вытащить номера потоков и их завершать, а незнаю как... msdn не помог, по моему способу создания в гугле информации нет.

Решение задачи: «Правильная остановка потоков»

textual
Листинг программы
  class CancellableThread
    {
        private readonly Thread thread;
        private bool run;
 
        public CancellableThread(Action threadStart)
        {
            thread = new Thread(()=>
                     {
                         while (run)
                         {
                             threadStart();
                         }
                     });
        }
 
        public CancellableThread(Action<object> parameterizedThreadStart)
        {
            thread = new Thread(obj =>
                                {
                                    while (run)
                                    {
                                        parameterizedThreadStart(obj);
                                    }
                                });
        }
 
        public void Start()
        {
            run = true;
            thread.Start();
        }
 
        public void Start(object obj)
        {
            thread.Start(obj);
        }
 
        public void Stop()
        {
            run = false;
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5