Поток не завершает работу вместе с приложением - 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) { } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д