private void loadFromFileNames(object sender, object arg) { BackgroundWorker backgroundWorker = (BackgroundWorker)sender; IEnumerable <string> fileNames = (IEnumerable <string>)arg; for (int i = 0; i < fileNames.Count(); ++i) { string fileName = fileNames.ElementAt(i); Pack pack = null; if (!Packs.TryGetValue(fileName.GetHashCode(), out pack)) { pack = Pack.Load(fileName); if (pack != null) { Packs.Add(fileName.GetHashCode(), pack); foreach (Asset asset in pack.Assets.Values) { if (!AssetsByType.ContainsKey(asset.Type)) { AssetsByType.Add(asset.Type, new List <Asset>()); } AssetsByType[asset.Type].Add(asset); } } } float percent = (Single)(i + 1) / (Single)fileNames.Count(); backgroundWorker.ReportProgress((int)(percent * 100.0f), System.IO.Path.GetFileName(fileName)); } }