当你须要通过一个耗时操作获取到数据,并扭转窗体或控件的显示时,该工具能够为你解决窗体假死,以及跨线程的问题。
解决 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));
});
}
}