private void Download_DownloadPercentageChangedEvent(object sender, PercentageChangedEventArgs args) { var info = (HttpDownload)sender; Debug.WriteLine($"PercentageChanged: Task: {info.DownloadPath} Speed: {args.Speed} Progress: {args.Progress}"); //TaskPercentageChangedEvent?.Invoke(this, new DownloadProgressChangedEventArgs(_database.GetFileIdByPath(info.DownloadPath), new DataSize(args.Progress), new DataSize(args.Speed))); EventAggregator.GetEvent <DownloadProgressChangedEvent>().Publish(new DownloadProgressChangedEventArgs(_database.GetFileIdByPath(info.DownloadPath), new DataSize(args.Progress), new DataSize(args.Speed))); }
public TaskManager(IUnityContainer container, LocalDiskUser user) : base(container) { _user = user; _dataFolder = Path.Combine(Directory.GetCurrentDirectory(), "Users", user.Name); _database = TaskDatabase.GetDatabaseByUser(user); _runing = true; new Thread(async() => { while (_runing) { Thread.Sleep(1000); if (_downloadingTasks.Count(v => v.DownloadState == DownloadStateEnum.Downloading) < _user.ParallelTaskNumber) { //如果正在下载的文件数量与已经请求的文件数量相同 if (_database.GetDownloadingTask().Length == _downloadingTasks.Count) { var result = await _database.Next(); if (result.ErrorCode != 0) { if (result.ErrorCode == 209) { //没有新的任务了 } //出现错误时的处理 continue; } //Created -> Waiting EventAggregator.GetEvent <DownloadStateChangedEvent>().Publish(new DownloadStateChangedEventArgs(_database.GetFileIdByPath(result.Info.DownloadPath), DownloadStateEnum.Created, DownloadStateEnum.Waiting)); AddDownloadingTask(result.Info); continue; } var data = _database.GetDownloadingTask() .FirstOrDefault(v => _downloadingTasks.All(v2 => v.DownloadPath != v2.DownloadPath)); AddDownloadingTask(data.Info); } } }).Start(); }
public TaskManager(IUnityContainer container, MountUser user) : base(container) { _user = user; _dataFolder = Path.Combine(Common.UserDataSavePath, user.Username); if (!Directory.Exists(_dataFolder)) { Directory.CreateDirectory(_dataFolder); } _database = TaskDatabase.GetDatabaseByUser(Container, user); _runing = true; new Thread(async() => { while (_runing) { Thread.Sleep(1000); if (_downloadingTasks.Count(v => v.DownloadState == DownloadStateEnum.Downloading) < Container.Resolve <ILocalConfigInfo>().ParallelTaskNumber) { //如果正在下载的文件数量与已经请求的文件数量相同 if (_database.GetDownloadingTask().Length == _downloadingTasks.Count) { var result = await _database.Next(); if (result == null) { continue; } if (result.ErrorCode != 0) { if (result.ErrorCode == 209) { //没有新的任务了 } //出现错误时的处理 continue; } //Created -> Waiting EventAggregator.GetEvent <DownloadStateChangedEvent>().Publish(new DownloadStateChangedEventArgs(_database.GetFileIdByPath(result.Info.DownloadPath), DownloadStateEnum.Created, DownloadStateEnum.Waiting)); AddDownloadingTask(result.Info); continue; } var data = _database.GetDownloadingTask() .FirstOrDefault(v => _downloadingTasks.All(v2 => v.DownloadPath != v2.DownloadPath)); if (data != null) { AddDownloadingTask(data.Info); } } } }) { IsBackground = true }.Start(); }