使用后台线程能够减轻主线程的工作量,虽然没什么明显差别,无聊弄弄的,也算是接触一下线程的使用。
1、把查询加载数据交给后台线程去执行
首先,先声明线程
/// <summary> /// 声明用于初始化列表的线程 /// </summary> protected BackgroundWorker InitBackgroundWorker;
其次,在窗体加载时让线程开始执行工作
private void NewsForm_Load(object sender, EventArgs e) { try { //后台线程执行方法initBackgroundWorker_DoWork
InitBackgroundWorker.DoWork += initBackgroundWorker_DoWork; //当后台操作已完成、被取消或引发异常时执行方法initBackgroundWorker_RunWorkerCompleted InitBackgroundWorker.RunWorkerCompleted += initBackgroundWorker_RunWorkerCompleted; //开始执行线程 InitBackgroundWorker.RunWorkerAsync();} catch (Exception ex) { MessageBoxErrorShow(ex); } }
initBackgroundWorker_DoWork方法
//声明一个参数实体的全局变量 private Student studentPara; //声明一个获取实体集合的全局变量 public List<Student> lstStudent; /// <summary> /// 初始化Grid数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void initBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
InintPara(); GetListData(); }
/// <summary> /// 初始化入参条件 /// </summary> /// <param name="orderby"></param> /// <param name="isAsc"></param> private void IninPara() { studentPara = new Student() { name = txtName.text; age = txtAge.text; } } /// <summary> /// 获取学生列表 /// </summary> private void GetListData() { //这里是通过webApi实现数据分离,查询部分通过调用API实现 //序列化查询参数实体 var obj = JsonConvertHelper.SerializeObject(studentPara, new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" }); //获取查询列表 lstStudent = GetApi<List<NewsDto>>("obj=" + obj.Replace("+", "2B%"), "Student/GetstudentByCondition"); }
接着可以绑定grid数据源。