关于线程的问题
来源:互联网 发布:苹果手机视频软件 编辑:程序博客网 时间: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(); }
- 关于线程的问题
- 关于线程的问题
- 关于线程的问题
- 关于线程的问题
- 关于线程的终止问题
- 关于线程的停止问题
- 关于线程创建的问题
- 关于线程池的问题
- 关于Android的线程问题
- 关于线程死锁的问题
- 关于线程的一些问题
- 关于Java线程的问题
- 关于线程退出的问题
- java关于线程的问题
- 关于线程并发的问题
- 关于线程阻塞的问题
- 关于线程中断的问题
- 关于线程问题的总结
- 极大似然估计的朴素理解
- 设计模式随笔系列:开篇-模式和原则
- 时间表-感悟
- [unix系统编程]读者-写者问题
- 关于class与struct的联系学习与总结
- 关于线程的问题
- RGBA格式图像中HSBC(色相、饱和度、明度、对比度)调整
- PCA--主成分分析
- Oracle 优化器的执行计划了解
- XCode4如何解决调试程序时,忽然崩溃,而找不到崩溃的代码
- Linux Network Configuration
- 2012_05_27
- New in WCF 4.0 Note & Filters for Message Logging Note
- mac下安装cups-pdf,虚拟打印机软件,提供vi下的彩色打印