使用线程同时处理一个DataTable


 public DataTable GetDs(int j)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(String));
            dt.Columns.Add("Value", typeof(String));

            DataRow dr = null;

            for (int i = 0; i < j; i++)
            {
                dr = dt.NewRow();
                dr["ID"] = i;
                dr["Value"] = "第" + i + "个";

                dt.Rows.Add(dr);
            }

            return dt;
        }

        public void Outputvalue(DataTable dt)
        {
            //创建
            Thread tread = new Thread(new ParameterizedThreadStart(Tops));
            tread.Start(dt);

            tread = new Thread(new ParameterizedThreadStart(Mop));
            tread.Start(dt);
        }

        /// <summary>
        /// 上半部分
        /// </summary>
        /// <param name="obj"></param>
        public void Tops(object obj)
        {
            DataTable dt = (DataTable)obj;
            int Count = dt.Rows.Count;
            int top = Count / 2;

            for (int i = 0; i < top; i++)
            {
                OutValue(i, 1);
                Thread.Sleep(Convert.ToInt32(1000));
            }
        }

        /// <summary>
        /// 下半部分
        /// </summary>
        /// <param name="obj"></param>
        public void Mop(object obj)
        {
            DataTable dt = (DataTable)obj;
            int Count = dt.Rows.Count;
            int top = Count / 2;

            for (int i = top; i < Count; i++)
            {
                OutValue(i, 2);
                Thread.Sleep(Convert.ToInt32(500));
            }
        }

        /// <summary>
        /// 定义委托
        /// </summary>
        /// <param name="str"></param>
        /// <param name="i"></param>
        public delegate void MyInvoke(object str, int i);

        /// <summary>
        /// 委托方法
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="i"></param>
        private void OutValue(object obj, int i)
        {
            if (textBox1.InvokeRequired)
            {
                MyInvoke _myInvoke = new MyInvoke(OutValue);
                this.Invoke(_myInvoke, new object[] { obj,i });
            }
            else
            {
                if (i == 1)
                {
                    textBox1.Text = textBox1.Text + "这个是第:" + obj.ToString() + " 个\r\n";
                }
                else
                {
                    textBox2.Text = textBox2.Text +  "这个是第:" + obj.ToString() + " 个\r\n";
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = GetDs(100);
            Outputvalue(dt);
        }



发布了27 篇原创文章 · 获赞 53 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/auspi12341/article/details/17737193
今日推荐