Exemplo n.º 1
0
 /// <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;
 }
Exemplo n.º 2
0
        // 检查任务情况
        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);
            });
        }