public PerformanceBalancerThread(PerformanceBalancer performanceBalancer, PerformanceBalanceSettings settings) : base() { this.settings = settings; this.performanceBalancer = performanceBalancer; managedThread.IsBackground = true; managedThread.Name = "PerformanceBalancerThread"; managedThread.Start(); }
/// <summary> /// Главный цикл /// </summary> protected override void DoLoop() { Thread.Sleep(settings.ActionInterval); try { while (!cancellationTokenSource.IsCancellationRequested) { performanceBalancer.DoAction(); // я не могу использовать Timer из за того, что нельзя использовать ThreadPool // поэтому пользуюсь Thread.Sleep Thread.Sleep(settings.ActionInterval); } } finally { // Теряем ссылку на объект, что бы не мешать GC. Между окончанием потока и высвобождением стека может пройти какое-то время. performanceBalancer = null; } }