关于线程的问题

来源:互联网 发布:苹果手机视频软件 编辑:程序博客网 时间:2024/06/06 13:14

当碰到数据量较大的查询时候:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Text;using System.Windows.Forms;using ICSharpCode.SharpDevelop.Sda;using System.Threading;namespace WorkbenchClient.View.ceshi{    public partial class ceshi : ICSharpCode.SharpDevelop.Gui.AbstractUCViewContent    {        public ceshi()        {            FileName = "ceshi";            TitleName = "测试专用页面";            InitializeComponent();        }        string sql = string.Empty;        //委托        private delegate void SetTextCallbakc();        DataSet dstable = null;        Thread th = null;        private void button1_Click(object sender, EventArgs e)        {            sql = "select top 1000 * from " + textBox1.Text.Trim() + " " + textBox2.Text.Trim();            //Thread thead = new Thread(new ThreadStart(getdataset));            //thead.Start();            //SetTextCallbakc stc = new SetTextCallbakc(getdataset);            //Invoke(stc);           // backgroundWorker_Combo.RunWorkerAsync();            //this.userControl11.SetControlInfo("查询中。。。", true);            th = new Thread(new ThreadStart(QueryThreadStart));            th.IsBackground = true;            th.Start();        }        private void getdataset()        {            try            {                dstable = WebService.GetSqlDataSet(sql, 0);            }            catch (Exception ex)            {                MessageBox.Show(ex.ToString());            }        }        private void button2_Click(object sender, EventArgs e)        {            sql = richTextBox1.Text.Trim();            //SetTextCallbakc stc = new SetTextCallbakc(getdataset);            //Invoke(stc);            Thread thead = new Thread(new ThreadStart(getdataset));            thead.IsBackground = true;            thead.Start();        }        private void backgroundWorker_Combo_DoWork(object sender, DoWorkEventArgs e)        {            try            {                dstable = WebService.GetSqlDataSet(sql, 0);                //backgroundWorker_Combo.ReportProgress                //dvtable.DataSource = dstable.Tables[0];                //dvtable.AutoResizeColumns();                //dvtable.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;            }            catch (Exception ex)            {                MessageBox.Show(ex.ToString());            }        }        private void backgroundWorker_Combo_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)        {            dvtable.DataSource = dstable.Tables[0];            dvtable.AutoResizeColumns();            dvtable.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;        }        private void QueryThreadStart()        {            ThreadClass tc = new ThreadClass();            tc.OnQueryEnd += new ThreadClass.QueryEnd(tc_OnQueryEnd);            tc.OnQueryDataEnd += new ThreadClass.QueryDataEnd(tc_OnQueryDataEnd);            tc.QueryStart(sql);        }        void tc_OnQueryEnd(string str)        {            if (this.InvokeRequired)            {                this.Invoke(new ThreadClass.QueryEnd(tc_OnQueryEnd), new object[] { str });            }            else            {                //this.userControl11.SetControlInfo("查询完成", true);            }        }        void tc_OnQueryDataEnd(DataTable dt)        {            if (this.InvokeRequired)            {                this.Invoke(new ThreadClass.QueryDataEnd(tc_OnQueryDataEnd),new object[] { dt });            }            else            {                this.dvtable.DataSource = dt;            }        }    }    /// <summary>    /// 查询数据    /// </summary>    public class QueryData    {        private DataSet _resultDataSet;        public DataSet ResultDataSet        {            get { return _resultDataSet; }        }        //得到查询的数据集        public void QueryDataBySql(string queryContent)        {            _resultDataSet = WebService.GetSqlDataSet(queryContent, 0);        }    }    /// <summary>    /// 事件响应    /// </summary>    public class ThreadClass    {        public delegate void QueryEnd(string str);        //用于设置自定义进度条内容的事件        public event QueryEnd OnQueryEnd;        public delegate void QueryDataEnd(DataTable dt);        //用于设置数据表格内容更新的事件        public event QueryDataEnd OnQueryDataEnd;        public void QueryStart(string content)        {            QueryData qb = new QueryData();            qb.QueryDataBySql(content);            if (OnQueryEnd != null)            {                OnQueryEnd("查询完成");            }            if (OnQueryDataEnd != null)            {                OnQueryDataEnd(qb.ResultDataSet.Tables[0]);            }        }    }}

请博友解释一下下面这个button方法执行的过程。

private void button1_Click(object sender, EventArgs e)        {            sql = "select top 1000 * from " + textBox1.Text.Trim() + " " + textBox2.Text.Trim();            th = new Thread(new ThreadStart(QueryThreadStart));            th.IsBackground = true;            th.Start();        }



 

原创粉丝点击