Esempio n. 1
0
 private void Start_Btn_Click(object sender, EventArgs e)
 {
     if (Start_Btn.Text == "停止爬公司列表")
     {
         CancelTokenCounty.Cancel();
         Start_Btn.Text = "停止中.....";
     }
     else if (Start_Btn.Text == "开始爬公司列表")
     {
         Start_Btn.Text = "停止爬公司列表";
         listBox1.Items.Insert(0, G("爬公司列表已开始"));
         toolStripProgressBar1.Maximum = MakepoloCompany.CountyPageUrlQueue.Count();
         toolStripProgressBar1.Minimum = 0;
         toolStripProgressBar1.Step    = 1;
         var Tasks = new List <Task>();
         for (int j = 0; j < 5; j++)
         {
             Tasks.Add(Task.Run(async() =>
             {
                 var str = string.Format("线程{0}已启动.", Thread.CurrentThread.ManagedThreadId);
                 UI(() => { listBox1.Items.Insert(0, G(str)); });
                 while (!CancelTokenCounty.IsCancellationRequested)
                 {
                     try
                     {
                         if (MakepoloCompany.DequeuePageUrl(out KeyValuePair <string, string> SourceUrl))
                         {
                             var UrlResult = await MakepoloCompany.GetPageContextAsync(SourceUrl.Key, SourceUrl.Value);
                             UI(() =>
                             {
                                 CountyLsBox.Items.AddRange(UrlResult.ToArray());
                                 toolStripProgressBar1.PerformStep();
                                 toolStripProgressBar2.Maximum = CountyLsBox.Items.Count;
                             });
                         }
                         else
                         {
                             CancelTokenCounty.Cancel();
                         }
                     }
                     catch (Exception ex)
                     {
                         UI(() => { listBox1.Items.Insert(0, G(ex.Message)); });
                     }
                     Thread.Sleep(10);
                 }
                 ;
             }, CancelTokenCounty.Token).ContinueWith((t) =>
             {
                 Tasks.Remove(t);
                 var str = string.Format("线程{0}已退出.", Thread.CurrentThread.ManagedThreadId);
                 UI(() => { listBox1.Items.Insert(0, G(str)); });
             }));
         }
         Task.WhenAll(Tasks.ToArray()).ContinueWith((t) =>
         {
             MakepoloCompany.SaveCompanyUrl();
             UI(() =>
             {
                 listBox1.Items.Insert(0, G(string.Format("公司地址保存成功,总共拉取{0}个.", CountyLsBox.Items.Count)));
                 Start_Btn.Text    = "开始爬公司列表";
                 CancelTokenCounty = new CancellationTokenSource();
             });
         });
     }
 }