使用后台线程能够减轻主线程的工作量,虽然没什么明显差别,无聊弄弄的,也算是接触一下线程的使用。
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数据源。