private void DownloadPendingAssemblies() { if (_pendingDownloads.Count == 0) { return; } _busyContext.IsBusy = true; ThreadPool.QueueUserWorkItem(o => { while (_pendingDownloads.Count > 0) { var fileInfo = _pendingDownloads.Dequeue(); Dispatcher.BeginInvoke(() => { _busyContext.ItemLabel = fileInfo.Name; }); try { string extension = Path.GetExtension(fileInfo.Name); if (KnownFormats.Zip.Contains(extension)) { StorageService.AddFileToCache(fileInfo); Dispatcher.BeginInvoke(() => LoadZiPackage(fileInfo)); } else { var definition = AssemblyDefinition.ReadAssembly(fileInfo.OpenRead()); string assemblyPath = definition.IsSilverlight() ? StorageService.CacheSilverlightAssembly(fileInfo.Name, fileInfo.OpenRead()) : StorageService.CacheNetAssembly(fileInfo.Name, fileInfo.OpenRead()); Dispatcher.BeginInvoke(() => { var assemblyStream = new AssemblyFileStream(fileInfo); ApplicationModel.Current.AssemblyCache.LoadAssembly(assemblyStream, definition, false); LoadOrReplaceAssembly(definition, assemblyStream); }); } } catch (Exception ex) { Debug.WriteLine(ex.Message); Dispatcher.BeginInvoke(() => new ErrorWindow(ex).Show()); } } Dispatcher.BeginInvoke(() => _busyContext.IsBusy = false); }); }