private void FeedEditionsCallBack(object state) { DownloadReporter.Reset(); _downloadManagerEdition = new DownloadManagerEdition(DownloadManager, DownloadReporter); _downloadManagerEdition.Finished += DownloadManagerEditionFinished; _downloadManagerEdition.Error += DownloadManagerEditionError; foreach (EditionInfoViewModel editionInfoViewModel in Editions.Where(s => s.Active)) { Interlocked.Increment(ref CountDown); string[] cardInfos = DownloadManager.GetCardUrls(editionInfoViewModel.Url); editionInfoViewModel.DownloadReporter.Total = cardInfos.Length; DownloadReporter.Total += cardInfos.Length; EditionInfoViewModel model = editionInfoViewModel; if (model.CardNumber.HasValue) { if (cardInfos.Length != model.CardNumber.Value) { AppendMessage(string.Format("{0}: {1} urls while cardnumber is set to {2}", model.Name, cardInfos.Length, model.CardNumber.Value), false); } } _downloadManagerEdition.AddRange(cardInfos.Select(s => WebAccess.ToAbsoluteUrl(model.Url, s)), model.EditionId, model.DownloadReporter); } _downloadManagerEdition.Start(); }
private void Downloader(object state) { foreach (Tuple <bool, object> t in _pictures) { try { _exportImagesWorker.Export(t.Item1, t.Item2); } catch (Exception ex) { string errormessage = ex.Message; if (ex.InnerException != null) { errormessage = ex.InnerException.Message; } AppendMessage(string.Format("{0} -> {1}", t.Item2, errormessage), false); } DownloadReporter.Progress(); } DownloadReporter.Finish(); JobFinished(); }
private void Downloader(object state) { string url = null; while (true) { int currentJob = -1; try { _lock.EnterWriteLock(); currentJob = _nextJob; _nextJob++; _lock.ExitWriteLock(); if (currentJob >= _urls.Count || IsStopping) { break; } KeyValuePair <string, object> kv = _urls[currentJob]; url = kv.Key; //Do the first alone to wait for proxy if needed if (currentJob == 0 || _firstDoneEvent.WaitOne()) { if (_fatalException) { break; } string errors = Download(url, kv.Value); if (!string.IsNullOrWhiteSpace(errors)) { AppendMessage(string.Format("{0} -> {1}", url, errors), false); } } DownloadReporter.Progress(); } catch (Exception ex) { if (currentJob == 0) { _fatalException = true; } string errormessage = ex.Message; if (ex.InnerException != null) { errormessage = ex.InnerException.Message; } AppendMessage(string.Format("{0} -> {1}", url, errormessage), false); } finally { //First finished, Go for the others if (currentJob == 0) { _firstDoneEvent.Set(); } } Interlocked.Decrement(ref CountDown); } if (CountDown == 0 || IsStopping || _fatalException) { DownloadReporter.Finish(); JobFinished(); } }