Поток не завершает работу вместе с приложением - C#

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

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

Thread threadMoving = new Thread(ThreadMoving.DoWork);
threadMoving.IsBackground = true;
threadMoving.Name = "MovingThread";
threadMoving.Start();
 
...........................................
 
public static void DoWork()
{
   while (true)
   {
       if (!Vars.isGSConnected) { Thread.Sleep((int)pause); continue; }
                  ..............................................................
   }
почему-то продолжает работать - точнее спать (Thread.Sleep((int)pause)

Решение задачи: «Поток не завершает работу вместе с приложением»

textual
Листинг программы
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Jotun
{
    public partial class Form1 : Form
    {
        private CancellationTokenSource mToken;
        private Task mTask;
 
        public Form1()
        {
            InitializeComponent();
 
            this.mToken = new CancellationTokenSource();
            this.mTask = Task.Factory.StartNew(x => this.DoWork((CancellationToken)x), this.mToken.Token, this.mToken.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
        }
 
        private void DoWork(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                cancellationToken.WaitHandle.WaitOne(1000); // Sleep
 
                //cancellationToken.ThrowIfCancellationRequested();
            }
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                this.mToken.Cancel();
                this.mTask.Wait();
            }
            catch (AggregateException)
            {
            }
        }
    }
}

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


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

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

9   голосов , оценка 3.778 из 5
Похожие ответы