Поток не завершает работу вместе с приложением - 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; }
..............................................................
}Решение задачи: «Поток не завершает работу вместе с приложением»
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)
{
}
}
}
}