/// <summary> /// Handle ending of each task. /// </summary> private void TaskFinishedHandler(object sender, EventArgs e) { if (sender == _infoCollector) { _infoNotifier.SetQueueFillingFinished(); _xmlWriter.SetQueueFillingFinished(); } Interlocked.Increment(ref _tasksFinished); // Check if all tasks finished if (_tasksFinished == 3) { OnTreeBuildingFinished(); _infoCollector = null; _infoNotifier = null; _xmlWriter = null; } }