C#常用工具类,如何优雅的使用多线程以及优雅的跨线程的解决方案,解决System.InvalidOperationException:“线程间操作无效: 从不是创建控件“”的线程访问它。”

当你需要通过一个耗时操作获取到数据,并改变窗体或控件的显示时,该工具可以为你解决窗体假死,以及跨线程“线程间操作无效: 从不是创建控件“”的线程访问它。”的问题。

在我的项目中实际使用:

//多线程工具
this.TaskRun(cross =>
{
    //多线程代码,请求API
    List types = ApiRoutes.EmpApi.GetTypeList(out string msg);

    //跨线程代码块
    cross.Invoke(delegate
    {
        uiDataGridView1.DataSource = types;
        uiDataGridView1.Refresh();
    });
});

你只需要创建如下工具类:

    public static class TaskEx
    {
        /// 
        /// 启动多线程
        /// 
        public static void TaskRun(this System.Windows.Forms.Control ctrl, Action> action)
        {
            System.Threading.ThreadPool.QueueUserWorkItem(delegate
            {
                action.Invoke(b => ctrl.Invoke(b));
            });
        }
    }

 

你可能感兴趣的:(C#工具类,WinForm,c#,winform,多线程,线程安全,软件开发)