示例#1
0
        private void OnTimerElapsed(object state)
        {
#if DEBUG
            Console.WriteLine(DateTime.Now.ToString(timeformat) + " | Core.Transfer.ItemsTransferManager.OnTimerElapsed(): Timer elapsed.");
#endif
            ThreadsItemLoadWork.CleanNotWorkingThread();
            if (ItemsTransferWork.Count < ItemsWorkingLimit)
            {
                for (int i = 0; i < ItemsTransfer.ItemsBlinding.Count; i++)
                {
                    if (ItemsTransfer.ItemsBlinding[i].status == StatusTransfer.Waiting)
                    {
                        Thread thr = new Thread(WorkThread);
                        ItemsTransfer.ItemsBlinding[i].status = StatusTransfer.Running;
                        thr.Start(ItemsTransfer.ItemsBlinding[i]);
                        ThreadsItemLoadWork.Add(thr);
                    }
                }
            }
        }
示例#2
0
        public void ManagerItemsAndRefreshData()
        {
            //clean thread
            ThreadsItemLoadWork.CleanNotWorkingThread();

            switch (GroupData.status)
            {
            case StatusTransfer.Loading: return;

            case StatusTransfer.Started: GroupData.status = StatusTransfer.Running; GroupData.TimeStamp = CurrentMillis.Millis; break;

            case StatusTransfer.Remove: return;
            }

            if (GroupData.status != StatusTransfer.Running)
            {
                if (!string.IsNullOrEmpty(GroupData.DataSource.Speed))
                {
                    GroupData.DataSource.Speed = "";
                }
                if (!string.IsNullOrEmpty(GroupData.DataSource.Estimated))
                {
                    GroupData.DataSource.Estimated = "";
                }
            }

            #region Count & Remove
            int count_item_running = 0;
            int count_item_done    = 0;
            int count_item_error   = 0;
            int count_item_stop    = 0;
            int count_item_remove  = 0;
            for (int i = 0; i < GroupData.items.Count; i++)
            {
                if (GroupData.items[i].status == StatusTransfer.Remove)
                {
                    GroupData.items.RemoveAt(i);
                    i--;
                    count_item_remove++;
                    continue;
                }
                else
                {
                    switch (GroupData.items[i].status)
                    {
                    case StatusTransfer.Running: count_item_running++; break;

                    case StatusTransfer.Moved:
                    case StatusTransfer.Added:
                    case StatusTransfer.Done: count_item_done++; break;

                    case StatusTransfer.Error: count_item_error++; break;

                    case StatusTransfer.Stop: count_item_stop++; break;

                    default: break;
                    }
                }

                //clear speed download when not running
                if (GroupData.items[i].status != StatusTransfer.Running)
                {
                    if (!string.IsNullOrEmpty(GroupData.items[i].DataSource.Speed))
                    {
                        GroupData.items[i].DataSource.Speed = "";
                    }
                    if (!string.IsNullOrEmpty(GroupData.items[i].DataSource.Estimated))
                    {
                        GroupData.items[i].DataSource.Estimated = "";
                    }
                }
            }
            #endregion

            #region Running group
            if (this.GroupData.status == StatusTransfer.Running)
            {
                if (this.GroupData.items.Count != 0 && count_item_done + count_item_error + count_item_stop != this.GroupData.items.Count)
                {
                    long Group_TotalTransfer = 0;
                    for (int i = 0; i < GroupData.items.Count; i++)//start item waiting and Started(force)
                    {
                        Group_TotalTransfer += GroupData.items[i].SizeWasTransfer;
                        #region start item force start
                        if (this.GroupData.items[i].status == StatusTransfer.Started && this.GroupData.status == StatusTransfer.Running)
                        {
                            Thread thr = new Thread(WorkThread);
                            this.GroupData.items[i].status = StatusTransfer.Running;
                            thr.Start(i);
                            ThreadsItemLoadWork.Add(thr);
                            count_item_running++;
                        }
                        #endregion

                        #region start item waiting
                        if (GroupData.items[i].status == StatusTransfer.Waiting && count_item_running < GroupData.MaxItemsDownload)
                        {
                            Thread thr = new Thread(WorkThread);
                            GroupData.items[i].status    = StatusTransfer.Running;
                            GroupData.items[i].TimeStamp = Stopwatch.GetTimestamp();
                            thr.Start(i);
                            ThreadsItemLoadWork.Add(thr);
                            count_item_running++;
                        }
                        #endregion

                        //caculate speed & time left item
                        if (this.GroupData.items[i].status == StatusTransfer.Running)
                        {
                            GroupData.items[i].CalSpeedAndTimeLeft();
                        }
                    }
                    //caculate speed & time left group
                    GroupData.CalSpeedAndTimeLeft(Group_TotalTransfer);
                }
                else
                {
                    if (count_item_done == this.GroupData.items.Count)
                    {
                        this.GroupData.status = StatusTransfer.Done;//Done group
                        if (this.AreCut)
                        {
                            //DeleteItems list = new DeleteItems();
                            //list.PernamentDelete = false;
                            //foreach (AddNewTransferItem item in items) list.items.Add(fromfolder.Path_Raw + (fromfolder.PathIsCloud ? "/" : "\\") + item.name);
                            //Thread thr = new Thread(AppSetting.ManageCloud.Delete);
                            //thr.Start(list);
                            throw new Exception("Transfer done, but not support delete items after copy now.");
                        }
                    }
                    else
                    {
                        this.GroupData.status = StatusTransfer.Error;
                    }
                }
            }
            #endregion

            #region Change LV
            if (this.GroupData.change == ChangeTLV.Processing && (this.GroupData.status == StatusTransfer.Done ||
                                                                  this.GroupData.status == StatusTransfer.Error || this.GroupData.status == StatusTransfer.Stop))
            {
                this.GroupData.change = ChangeTLV.ProcessingToDone;
            }
            if (this.GroupData.change == ChangeTLV.Done && (this.GroupData.status == StatusTransfer.Started || this.GroupData.status == StatusTransfer.Running ||
                                                            this.GroupData.status == StatusTransfer.Waiting || this.GroupData.status == StatusTransfer.Loading))
            {
                this.GroupData.change = ChangeTLV.DoneToProcessing;
            }
            #endregion

            RefreshGroupDataToShow(count_item_done, count_item_remove);
        }