示例#1
0
        private void RunSegments(Segment segment)
        {
            Thread segmentThread = new Thread(new ParameterizedThreadStart(StartSegment));

            segmentThread.Start(segment);

            lock (threads)
            {
                threads.Add(segmentThread);
            }
        }
示例#2
0
        private void CreateSegments()
        {
            try
            {
                CreateLocalFile();
            }
            catch
            {
                MessageBox.Show("创建本地文件失败!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }

            CalculatedSegment[] calculatedSegments;

            //如果不支持流的定位,则只创建一个段
            if (!serverFileInfo.AcceptRange)
            {
                calculatedSegments = new CalculatedSegment[] { new CalculatedSegment(0, serverFileInfo.FileSize) };
            }
            else
            {
                calculatedSegments = httpcalculator.GetSegments(segmentCount, serverFileInfo.FileSize);
            }

            lock (segments)
            {
                segments.Clear();
            }

            lock (threads)
            {
                threads.Clear();
            }

            for (int i = 0; i < calculatedSegments.Length; i++)
            {
                Segment segment = new Segment();

                segment.Index = i;
                segment.InitialPosition = calculatedSegments[i].StartPosition;
                segment.StartPosition = calculatedSegments[i].StartPosition;
                segment.EndPosition = calculatedSegments[i].EndPosition;
                segment.State = SegmentState.Idle;

                segments.Add(segment);
            }

            SetState(DownloadState.prepared);
            OnSegmentsCreated();
            StartSegments();
        }
示例#3
0
 public SegmentEventArgs(Downloader download, Segment segment)
     : base(download)
 {
     this.segment = segment;
 }
示例#4
0
 protected virtual void OnSegmentStopped(Segment segment)
 {
     if (SegmentStopped != null)
     {
         SegmentStopped(this, new SegmentEventArgs(this,segment));
     }
 }
示例#5
0
        private void LoadDownloads(XmlDownloader[] downloads)
        {
            for (int i = 0; i < downloads.Length; i++)
            {
                List<Segment> segments = new List<Segment>();
                for (int j = 0; j < downloads[i].Segments.Length; j++)
                {
                    Segment segment = new Segment();
                    segment.Index = downloads[i].Segments[j].Index;
                    segment.InitialPosition = downloads[i].Segments[j].InitialPosition;
                    segment.StartPosition = downloads[i].Segments[j].StartPosition;
                    segment.EndPosition = downloads[i].Segments[j].EndPosition;

                    segments.Add(segment);
                }

                DownloadManager.Instance.Add(
                    downloads[i].URL,
                    downloads[i].LocalFilePath,
                    downloads[i].SegmentCount,
                    Settings.Default.IsRuntoStart,
                    segments,
                    downloads[i].CreatedTime);
            }
        }