public async Task ImportTracks(IEnumerable<FileInfo> files, UserPlaylist playlist) { if (_isEnabled) throw new InvalidOperationException("The TrackImporter is already running"); _isEnabled = true; var extensions = _musicDataManager.MusicManager.AudioEngine.SupportedExtensions; var filesToImport = files.Where(fileInfo => fileInfo.Exists && !string.IsNullOrEmpty(fileInfo.Extension)).ToList(); var allFilesCount = (double)filesToImport.Count; for (int i = 0; i < filesToImport.Count; i++) { var fileInfo = filesToImport[i]; ProgressMessageChanged?.Invoke(this, $"\"{fileInfo.Name}\""); ProgressChanged?.Invoke(this, i / allFilesCount); var track = await GetTrack(fileInfo, extensions); if (track != null && playlist != null && !playlist.Tracks.Contains(track)) playlist.AddTrack(track); if (_cancel) break; } Finished?.Invoke(this, EventArgs.Empty); _isEnabled = false; _cancel = false; }