C#常用工具類,如何優雅的使用多線程以及優雅的跨線程的解決方案,解決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));
            });
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章