예제 #1
0
        private void temp_DownloadPartCompleted(object sender, EventArgs e)
        {
            WaitOrResumeAll(PartialDownloaderList, true);

            if (TotalBytesReceived == Size)
            {
                UpdateProgress();
                MergeParts();
                return;
            }

            OrderByRemaining(PartialDownloaderList);

            int rem = PartialDownloaderList[0].RemainingBytes;

            if (rem < 50 * 1024)
            {
                WaitOrResumeAll(PartialDownloaderList, false);
                return;
            }

            int from = PartialDownloaderList[0].CurrentPosition + rem / 2;
            int to   = PartialDownloaderList[0].To;

            if (from > to)
            {
                WaitOrResumeAll(PartialDownloaderList, false);
                return;
            }
            PartialDownloaderList[0].To = from - 1;

            WaitOrResumeAll(PartialDownloaderList, false);

            PartialDownloader temp = new PartialDownloader(_url, TempFileDirectory, Guid.NewGuid().ToString(), from, to, true);

            temp.DownloadPartCompleted       += temp_DownloadPartCompleted;
            temp.DownloadPartProgressChanged += temp_DownloadPartProgressChanged;
            PartialDownloaderList.Add(temp);
            temp.Start();
        }
예제 #2
0
        /// <summary>
        /// 唤醒下载
        /// </summary>
        public void Resume()
        {
            int count = PartialDownloaderList.Count;

            for (int i = 0; i < count; i++)
            {
                if (PartialDownloaderList[i].Stopped)
                {
                    int from = PartialDownloaderList[i].CurrentPosition + 1;
                    int to   = PartialDownloaderList[i].To;
                    if (from > to)
                    {
                        continue;
                    }
                    PartialDownloader temp = new PartialDownloader(_url, TempFileDirectory, Guid.NewGuid().ToString(), from, to, _rangeAllowed);

                    temp.DownloadPartProgressChanged += temp_DownloadPartProgressChanged;
                    temp.DownloadPartCompleted       += temp_DownloadPartCompleted;
                    PartialDownloaderList.Add(temp);
                    PartialDownloaderList[i].To = PartialDownloaderList[i].CurrentPosition;
                    temp.Start();
                }
            }
        }
예제 #3
0
        void CreateFirstPartitions()
        {
            Size = GetContentLength(_url, ref _rangeAllowed, ref _url);
            int maximumPart = (int)(Size / (25 * 1024));

            maximumPart = maximumPart == 0 ? 1 : maximumPart;
            if (!_rangeAllowed)
            {
                NumberOfParts = 1;
            }
            else if (NumberOfParts > maximumPart)
            {
                NumberOfParts = maximumPart;
            }

            for (int i = 0; i < NumberOfParts; i++)
            {
                PartialDownloader temp = CreateNewPd(i, NumberOfParts, Size);
                temp.DownloadPartProgressChanged += temp_DownloadPartProgressChanged;
                temp.DownloadPartCompleted       += temp_DownloadPartCompleted;
                PartialDownloaderList.Add(temp);
                temp.Start();
            }
        }