用线程异步加载查询内容显示GridView

使用后台线程能够减轻主线程的工作量,虽然没什么明显差别,无聊弄弄的,也算是接触一下线程的使用。

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数据源。


猜你喜欢

转载自blog.csdn.net/qq_35351282/article/details/80577349