基本信息
源码名称:多线程异步加载网络数据 完整例子源码
源码大小:0.07M
文件格式:.rar
开发语言:C#
更新时间:2013-07-20
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Threading;
using System.Data.SqlClient;

namespace AutoFor
{
    public partial class TextFor : Form
    {
        private delegate void UpDateDgvDelegate(string msg, int rowId, string columnName);
        private UpDateDgvDelegate _upDateStateDelegate;
        public TextFor()
        {
            InitializeComponent();
            _upDateStateDelegate = new UpDateDgvDelegate(UpDateDgv);
        }

        /// <summary>
        /// 修改表格的行数据
        /// </summary>
        /// <param name="msg">要修改为的数据</param>
        /// <param name="rowId">行号</param>
        /// <param name="columnName">列名</param>
        private void UpDateDgv(string msg, int rowId, string columnName)
        {
            try
            {
                dgvTextFor.Rows[rowId].Cells[columnName].Value = msg.ToString();
            }
            catch { }
        }

        /// <summary>
        /// 程序执行时间测试
        /// </summary>
        /// <param name="dateBegin">开始时间</param>
        /// <param name="dateEnd">结束时间</param>
        /// <returns>返回(秒)单位,比如: 0.00239秒</returns>
        public static string ExecDateDiff(DateTime dateBegin, DateTime dateEnd)
        {
            TimeSpan ts1 = new TimeSpan(dateBegin.Ticks);
            TimeSpan ts2 = new TimeSpan(dateEnd.Ticks);
            TimeSpan ts3 = ts1.Subtract(ts2).Duration();
            return ts3.TotalMilliseconds.ToString();
        }

        /// <summary>
        /// 执行数据
        /// </summary>
        /// <param name="dgvrowid"> 线程号行号</param>
        /// <param name="number">循环总次数</param>
        private void PingTask(int dgvrowid, int number, string url, int time)
        {
            //获取开始时间
            DateTime st = DateTime.Now;

            //开始时间
            this.BeginInvoke(_upDateStateDelegate, st.ToString("hh-mm-ss"), dgvrowid, "开始时间");

            for (int i = 0; i < number; i  )
            {
                //获取线程开始时间
                DateTime stThread = DateTime.Now;

                try
                {
                    HttpHelps hh = new HttpHelps();

                    //自动访问百度,主要是延长时间
                    string strdate = hh.GetHttpRequestStringByNUll_Get(url, null);

                    //当前循环次数
                    this.BeginInvoke(_upDateStateDelegate, strdate, dgvrowid, "数据");

                    //当前循环次数
                    this.BeginInvoke(_upDateStateDelegate, (i 1).ToString(), dgvrowid, "当前循环次数");

                    //获取结束时间
                    DateTime et = DateTime.Now;

                    //结束时间
                    this.BeginInvoke(_upDateStateDelegate, et.ToString("hh-mm-ss"), dgvrowid, "结束时间");

                    //总用时(毫秒)
                    this.BeginInvoke(_upDateStateDelegate, ExecDateDiff(st, et), dgvrowid, "总用时(毫秒)");
                    do
                    {
                        if (stThread.AddSeconds(time) <= DateTime.Now)
                        {
                            break;
                        }
                    } while (true);
                }
                catch { }
            }

        }

        /// <summary>
        /// 创建表格
        /// </summary>
        /// <param name="rows">生成多少行数</param>
        private void CreateTable(int rows)
        {
            DataTable dt_Sale = new DataTable();
            DataColumn dc = null;
            //线程ID
            dc = new DataColumn();
            dc.ColumnName = "线程ID";
            dc.DefaultValue = "1";
            dc.DataType = Type.GetType("System.String");
            dt_Sale.Columns.Add(dc);

            //循环类型
            dc = new DataColumn();
            dc.ColumnName = "循环类型";
            dc.DefaultValue = " ";
            dc.DataType = Type.GetType("System.String");
            dt_Sale.Columns.Add(dc);

            //当前循环次数
            dc = new DataColumn();
            dc.ColumnName = "当前循环次数";
            dc.DefaultValue = " ";
            dc.DataType = Type.GetType(" System.String");
            dt_Sale.Columns.Add(dc);

            //开始时间
            dc = new DataColumn();
            dc.ColumnName = "开始时间";
            dc.DefaultValue = " ";
            dc.DataType = Type.GetType("System.String");
            dt_Sale.Columns.Add(dc);

            //结束时间
            dc = new DataColumn();
            dc.ColumnName = "结束时间";
            dc.DefaultValue = " ";
            dc.DataType = Type.GetType("System.String");
            dt_Sale.Columns.Add(dc);

            //总用时(毫秒)
            dc = new DataColumn();
            dc.ColumnName = "总用时(毫秒)";
            dc.DefaultValue = " ";
            dc.DataType = Type.GetType("System.String");
            dt_Sale.Columns.Add(dc);

            //测试数据
            dc = new DataColumn();
            dc.ColumnName = "数据";
            dc.DefaultValue = " ";
            dc.DataType = Type.GetType("System.String");
            dt_Sale.Columns.Add(dc);


            DataRow dr = dt_Sale.NewRow();
            for (int i = 1; i < rows; i  )
            {
                dr["线程ID"] = i.ToString();
                dr["循环类型"] = "For循环";
                dr["当前循环次数"] = "0";
                dr["开始时间"] = "00:00:00";
                dr["结束时间"] = "00:00:00";
                dr["总用时(毫秒)"] = "0";
                dr["数据"] = "";
                dt_Sale.Rows.Add(dr);
                dr = dt_Sale.NewRow();
            }
            dgvTextFor.DataSource = dt_Sale;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            int count = Convert.ToInt32(txtCount.Text.Trim());
            int number = Convert.ToInt32(txtNumber.Text.Trim());
            CreateTable(count   1);
            //开启number个线程
            for (int i = 0; i < count; i  )
            {
                Thread pingTask = new Thread(new ThreadStart(delegate
               {
                   PingTask(i, number, textBox1.Text.Trim(), Convert.ToInt32(txtForTime.Text.Trim()));
               }));
                pingTask.Start();
                Thread.Sleep(Convert.ToInt32(txtKtime.Text.Trim()) * 1000);
            }
        }
    }
}