当你需要通过一个耗时操作获取到数据,并改变窗体或控件的显示时,该工具可以为你解决窗体假死,以及跨线程的问题。
解决System.InvalidOperationException:“线程间操作无效: 从不是创建控件“”的线程访问它。”
首先看看在我的项目中实际使用:
//多线程工具 this.TaskRun(cross => { //多线程代码,请求API List<EmpType> types = ApiRoutes.EmpApi.GetTypeList(out string msg); //跨线程代码块 cross.Invoke(delegate { uiDataGridView1.DataSource = types; uiDataGridView1.Refresh(); }); });
你只需要创建如下工具类:
public static class TaskEx { /// <summary> /// 启动多线程 /// </summary> public static void TaskRun(this System.Windows.Forms.Control ctrl, Action<Action<Action>> action) { System.Threading.ThreadPool.QueueUserWorkItem(delegate { action.Invoke(b => ctrl.Invoke(b)); }); } }