Example #1
0
        public void GenerateTasks()
        {
            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
                        };
                        taskOfXes.Add(taskOfX);

                        //Console.WriteLine( taskOfX.Url);
                        //Console.WriteLine($"{taskOfXes.Count} / {countOofTaskXShouldBeGenerated} {taskOfX.Url}");
                        if (taskOfXes.Count == countOofTaskXShouldBeGenerated)
                        {
                            AllTasksGeneratedEvent?.Invoke(this);
                        }
                    });
                }
            }

            //throw new NotImplementedException();
        }
Example #2
0
        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);
                        }
                    });
                }
            }
        }
Example #3
0
        public void GenerateTasks()
        {
            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
                        };
                        taskofY.AllTasksGeneratedEvent += (sender) =>
                        {
                            countOfFullYTask++;
                            if (countOfFullYTask == countOofTaskYShouldBeGenerated)
                            {
                                AllTasksGeneratedEvent?.Invoke(this);
                            }
                        };
                        taskofY.GenerateTasks();
                        //Console.WriteLine(taskofY.Y);
                        //Console.WriteLine(taskofY.UrlTemplate);
                        taskOfYs.Add(taskofY);
                        ////该Z层的所有Y均完成创建
                        //if (taskOfYs.Count == countOofTaskYShouldBeGenerated)
                        //{
                        //    AllTasksGeneratedEvent?.Invoke(this);
                        //    //if (this.AllTasksGeneratedEvent != null)
                        //    //{
                        //    //    //this.AllTasksGeneratedEvent
                        //    //}
                        //}
                    });
                }
            }
            //throw new NotImplementedException();
        }