private void RunSegments(Segment segment) { Thread segmentThread = new Thread(new ParameterizedThreadStart(StartSegment)); segmentThread.Start(segment); lock (threads) { threads.Add(segmentThread); } }
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(); }
public SegmentEventArgs(Downloader download, Segment segment) : base(download) { this.segment = segment; }
protected virtual void OnSegmentStopped(Segment segment) { if (SegmentStopped != null) { SegmentStopped(this, new SegmentEventArgs(this,segment)); } }
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); } }