public void GenerateTasksAndDownload() { var countOofTaskYShouldBeGenerated = (int)Math.Round(Math.Pow(2, Z)); var countOfFullYTask = 0; for (int y = 0; y < countOofTaskYShouldBeGenerated; y++) { var currentY = y; lock (taskOfYs) { Task.Factory.StartNew(() => { var taskofY = new TaskOfY() { UrlTemplate = string.Format(UrlTemplate, "", currentY.ToString(), "{2}"), Y = currentY, Z = Z }; taskOfYs.Add(taskofY); taskofY.TasksGeneratedIncreasedByEvent += (s, e) => { TasksGeneratedIncreasedByEvent?.Invoke(this, e); }; if (!Directory.Exists(Path.Combine(DirPath, $"{taskofY.Y}"))) { taskofY.DirPath = Directory.CreateDirectory(Path.Combine(DirPath, $"{taskofY.Y}")).FullName; } taskofY.DirPath = new DirectoryInfo(Path.Combine(DirPath, $"{taskofY.Y}")).FullName; taskofY.TasksFininshedIncreasedByEvent += (s, e, size) => { TasksFininshedIncreasedByEvent?.Invoke(this, e, size); }; taskofY.GenerateTasksAndDownload(); //Console.WriteLine(taskofY.Y); //Console.WriteLine(taskofY.UrlTemplate); ////该Z层的所有Y均完成创建 //if (taskOfYs.Count == countOofTaskYShouldBeGenerated) //{ // AllTasksGeneratedEvent?.Invoke(this); // //if (this.AllTasksGeneratedEvent != null) // //{ // // //this.AllTasksGeneratedEvent // //} //} }); } } }
public void GenerateTasksAndDownload() { var countOofTaskXShouldBeGenerated = (int)Math.Round(Math.Pow(2, Z)); for (int x = 0; x < countOofTaskXShouldBeGenerated; x++) { var currentX = x; lock (taskOfXes) { Task.Factory.StartNew(() => { var taskOfX = new TaskOfX() { Url = string.Format(UrlTemplate, "", "", currentX.ToString()), X = currentX, Y = Y, Z = Z, Filename = Path.Combine(DirPath, $"{currentX}.png") }; taskOfX.Finished += (sender, size) => { if (TasksFininshedIncreasedByEvent != null) { TasksFininshedIncreasedByEvent.Invoke(this, 1, size); } }; if (TasksGeneratedIncreasedByEvent != null) { TasksGeneratedIncreasedByEvent.Invoke(this, 1); } Task.Factory.StartNew(() => { taskOfXes.Add(taskOfX); }); taskOfX.Download(); //Console.WriteLine( taskOfX.Url); //Console.WriteLine($"{taskOfXes.Count} / {countOofTaskXShouldBeGenerated} {taskOfX.Url}"); if (taskOfXes.Count == countOofTaskXShouldBeGenerated) { AllTasksGeneratedEvent?.Invoke(this); } }); } } }
public void GenerateTasksAndDownload(string urlTemplate, string levels, string servers) { var split = levels.Split(','); var levelsShouldBeDone = split.Length; var levelsShouldBeGenerated = split.Length; foreach (var level in split) { var lev = int.Parse(level); var taskOfZ_0 = new TaskOfZ() { UrlTemplate = string.Format(urlTemplate, lev.ToString(), "{1}", "{2}"), Z = lev }; lock (this.TaskOfZs) { TaskOfZs.Add(taskOfZ_0); } taskOfZ_0.TasksGeneratedIncreasedByEvent += (s, e) => { TasksGeneratedIncreasedByEvent?.Invoke(this, e); }; //Directory.CreateDirectory($"{tz.Z}"); if (!Directory.Exists($"{taskOfZ_0.Z}")) { taskOfZ_0.DirPath = Directory.CreateDirectory($"{taskOfZ_0.Z}").FullName; } taskOfZ_0.DirPath = new DirectoryInfo($"{taskOfZ_0.Z}").FullName; taskOfZ_0.TasksFininshedIncreasedByEvent += (s, e, size) => { this.TasksFininshedIncreasedByEvent?.Invoke(this, e, size); }; taskOfZ_0.GenerateTasksAndDownload(); } }