本人是搞web开发的,对于线程方面研究很少,只是知道基本的概念。在web中,异步都是用ajax来实现。最近做了个小项目是用来拆分word文档的。项目完成后,要处理几十万条的数据。这个时候再用web来实现就很不友好了。说以就想到了用winform来实现。下面来列出需求:

  1.  有个输入框,输入sql语句。
  2.  有个主键的起始,截止输入框。
  3.  开始处理的按钮。中止的按钮等。显示处理的进度条(由于处理数据较大,进度条半天也没走到,这个时候为了直观就需要使用lable来计数处理的条数)

          为了不影响窗体的运行。开始的处理需要在新的线程中运行,在处理的过程中,每处理一条数据需要对lable标签赋值(跨线程访问控件)

 

以下是程序代码:

          

namespace DateManager
{
    public partial class Form1 : Form
    {

        Thread td = null;

        public Form1()
        {
            InitializeComponent();
            td = new Thread(begionSplit);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            td.IsBackground = true;
            td.Start();

        }


        public void begionSplit()
        {
            string sql = this.tb_Sql.Text;
            int begionindex = Convert.ToInt32(this.tb_pagesiez.Text == "" ? "10" : this.tb_pagesiez.Text);
            int endindex = Convert.ToInt32(this.tb_pageIndex.Text == "" ? "1" : this.tb_pageIndex.Text);
            sql = sql + " and CATInID >=" + begionindex + " and CATInID <=" + endindex + "";
            SplitLowSystem.BLL.SourceLawBLL bll = new SplitLowSystem.BLL.SourceLawBLL();
            int pagecout = 0;
            DataTable dt = SplitLowSystem.Common.DbHelperSQL.Query(sql).Tables[0];
            if (progressBar1.InvokeRequired)
            {
                this.progressBar1.Invoke(new MethodInvoker(() => { progressBar1.Maximum = dt.Rows.Count; }));
            }
            else
            {
                progressBar1.Maximum = dt.Rows.Count;
            }
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                try
                {
                    if (progressBar1.InvokeRequired)
                    {
                        this.progressBar1.BeginInvoke(new MethodInvoker(() => { progressBar1.Value = i + 1; }));
                    }
                    else
                    {
                         progressBar1.Value = i + 1; 
                    }
                    if (lb_int.InvokeRequired)
                    {
                        this.lb_int.BeginInvoke(new MethodInvoker(() => { this.lb_int.Text = (i + 1).ToString(); }));
                    }
                    else
                    {
                        this.lb_int.Text = (i + 1).ToString();
                    }
                    
                    string CATInID = dt.Rows[i]["CATInID"].ToString();
                    string sqlstr = "select * from LawProv where CATInID=" + CATInID + " order by ProvNumber ";
                    DataSet dss = SplitLowSystem.Common.DbHelperSQL.Query(sqlstr);
                    bll.SplitByds(dss, CATInID);
                }
                catch
                {
                    continue;
                }
            }
            MessageBox.Show("处理完毕!");
            td.Abort();

        }

    }
}

  

 

 posted on 2016-08-05 10:57  一朵茉莉花  阅读(691)  评论(0)    收藏  举报