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