當你需要通過一個耗時操作獲取到數據,並改變窗體或控件的顯示時,該工具可以爲你解決窗體假死,以及跨線程“線程間操作無效: 從不是創建控件“”的線程訪問它。”的問題。
在我的項目中實際使用:
//多線程工具
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));
});
}
}