/// <summary> /// 添加到任务队列 /// </summary> /// <param name="url">链接</param> /// <param name="path">目标路径</param> public void AddToTask(string url, string path) { if (Downloading.Count >= 5) { NeedDownload.Add(new AXunleiTask { Path = path, Url = url, }); } else { AXunleiTask DownloadTask = new AXunleiTask { Path = path, Url = url, }; DownloadTask.TaskID = NativeMethods.XLURLDownloadToFile(path, url, "http://www.pixiv.net/", ref DownloadTask.TaskID); NativeMethods.XLContinueTask(DownloadTask.TaskID); Downloading.Add(DownloadTask); } return; }
// 检查任务情况 private async void CheckTasks() { await Task.Run(() => { List <AXunleiTask> temp = null; while (true) { if (!Inited) { break; } temp = Downloading; if (temp.Count != 0) { for (int i = 0; i < temp.Count; i++) { AXunleiTask item = temp[i]; int plStatus = 0; ulong pullFileSize = 0; ulong pullRecvSize = 0; NativeMethods.XLQueryTaskInfo(item.TaskID, ref plStatus, ref pullFileSize, ref pullRecvSize); #if DEBUG Console.WriteLine(string.Format("[DEBUG] Task Status\n ID:{0} | Status:{1} | FileSize:{2}", item.TaskID, plStatus, pullFileSize)); #endif if (plStatus == NativeMethods.TaskStatus_Success) { Done.Add(item); Downloading.Remove(item); } else if (plStatus == NativeMethods.TaskStatus_Fail) { string[] files = Directory.GetFiles(Path.GetDirectoryName(item.Path)); foreach (string file in files) { if (file.Contains(Path.GetFileNameWithoutExtension(item.Path))) { File.Delete(file); } } item.TaskID = 0; NativeMethods.XLURLDownloadToFile(item.Path, item.Url, "http://www.pixiv.net/", ref item.TaskID); } } } temp = NeedDownload; if (temp.Count != 0) { for (int i = 0; i < temp.Count; i++) { AXunleiTask item = temp[i]; if (Downloading.Count < 5) { NativeMethods.XLURLDownloadToFile(item.Path, item.Url, "http://www.pixiv.net/", ref item.TaskID); NativeMethods.XLContinueTask(item.TaskID); Downloading.Add(item); NeedDownload.Remove(item); } } } #if DEBUG else { Console.WriteLine("[DEBUG] There are no any task in the list!"); } #endif Thread.Sleep(2000); } GC.SuppressFinalize(temp); }); }