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));
            });
        }
    }

 

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