关于c#:C常用工具类如何优雅的使用多线程以及优雅的跨线程的解决方案解决线程间操作无效-从不是创建控件的线程访问它

31次阅读

共计 583 个字符,预计需要花费 2 分钟才能阅读完成。

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

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

正文完
 0