• c# DataTable dt_JmMll,如果放在Task.Run(() =>)里面通过调用UpdateUIDatagridview()更新ui方法DataTable数据变0了


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 weixin_56459510 2024-04-05 10:55 采纳率: 33.3% 浏览 4 首页/ 编程语言 / c# DataTable dt_JmMll,如果放在Task.Run(() =>)里面通过调用UpdateUIDatagridview()更新ui方法DataTable数据变0了 c# c# DataTable dt_JmMll,如果放在Task.Run(() =>)里面直接执行代码是有数据的如图 Task task = Task.Run(() => { data_JmMll = dd.OpenFileWS(tbpathE.Text);//调用打开,读取用户打开的txt文件,赋值给data_JmMll集合 DataTable dt_JmMll = new DataTable("Number"); DataColumn dc00 = dt_JmMll.Columns.Add("序号", typeof(string)); DataColumn dc000 = dt_JmMll.Columns.Add("供应商", typeof(string)); DataColumn dc1 = dt_JmMll.Columns.Add("条码", typeof(string)); DataColumn dc2 = dt_JmMll.Columns.Add("名称", typeof(string)); DataColumn dc5 = dt_JmMll.Columns.Add("类别", typeof(string)); DataColumn dc3 = dt_JmMll.Columns.Add("进价", typeof(string)); DataColumn dc4 = dt_JmMll.Columns.Add("售价", typeof(string)); DataColumn dc6 = dt_JmMll.Columns.Add("库存", typeof(string)); int Itbtrue = 0;int Itbgood = 0;int k = 1; InsertEvent += new Insert(BsMerge_InsertEvent);//使用事件方法,同步显示数据 避免假死出现 SetProgressbar(0, data_JmMll.Count); for (int j = 0; j < data_JmMll.Count; j++) { Gressbar(j);//调用方法,赋值给MgBar1 string aa = data_JmMll[j].ToString().Replace("\t", "").Replace(" ", "").Trim(); DataTable dt1 = Stock.CPublic.DT("SELECT t_goods.vendorno,t_goods.barcode,t_goods.itemname,s_class.descr as 类别,t_goods.purprice,t_goods.saleprice,t_depot_h.itemqty as 库存 FROM t_depot_h,t_goods,s_class WHERE ( t_depot_h.itemno = t_goods.itemno ) and ( s_class.classcode = t_goods.classcode ) and t_goods.barcode='" + aa + "' "); if (dt1.Rows.Count > 0)//Rows.Count =0 代表数据库没记录即是新品 { DataRow dr; dr = dt_JmMll.NewRow(); dr["序号"] = j + 1;//使用j 保留txt对应的序号 dr["条码"] = aa; dr["供应商"] = dt1.Rows[0][0].ToString().Replace("\t", "").Replace(" ", "").Trim(); dr["名称"] = dt1.Rows[0][2].ToString().Replace("\t", "").Replace(" ", "").Trim(); dr["类别"] = dt1.Rows[0][3].ToString().Replace("\t", "").Replace(" ", "").Trim(); dr["进价"] = dt1.Rows[0][4].ToString().Replace("\t", "").Replace(" ", "").Trim(); dr["售价"] = dt1.Rows[0][5].ToString().Replace("\t", "").Replace(" ", "").Trim(); dr["库存"] = dt1.Rows[0][6].ToString().Replace("\t", "").Replace(" ", "").Trim(); dt_JmMll.Rows.Add(dr); Itbtrue++; k++; } Itbgood++; if (InsertEvent != null) { BsMerge_InsertEvent(null, j + 1, data_JmMll.Count); }//使用事件,动态显示数据,且窗口不假死 } if (this.InvokeRequired) { this.Invoke((MethodInvoker)delegate { dataGridView1.DataSource = dt_JmMll;// 在这里执行界面操作【解释:使用 Task.Run 中的代码中触发了界面操作,而界面操作必须在主线程中执行。可以通过在界面操作前使用 Control.Invoke 或者 Dispatcher.Invoke 来确保界面操作在主线程中执行。这样可以确保界面操作在主线程中执行,避免出现跨线程操作界面导致的异常。】 }); } else { } //UpdateUIDatagridview();//调用方法使用Invoke 更新ui,避免线程报错 }); 问题是:如果是在Task.Run(() =>)里面直接执行代码,在循环后通过调用UpdateUIDatagridview()更新ui方法DataTable数据变0了,请问大咖们帮看看因为啥,两者其实没啥区别如图: UpdateUIDatagridview();//调用方法使用Invoke 更新ui,避免线程报错 private void UpdateUIDatagridview() { #region //方法一: //dataGridView1.Invoke(new Action(() => //{ // dataGridView1.DataSource = dt_JmMll; //})); #endregion //方法二:原理:// 更新UI的操作需要放在UI线程中进行 如果需要更新UI,使用Invoke方法来调用主线程 if (this.InvokeRequired) { this.Invoke((MethodInvoker)delegate { dataGridView1.DataSource = dt_JmMll;// 在这里执行界面操作【解释:使用 Task.Run 中的代码中触发了界面操作,而界面操作必须在主线程中执行。可以通过在界面操作前使用 Control.Invoke 或者 Dispatcher.Invoke 来确保界面操作在主线程中执行。这样可以确保界面操作在主线程中执行,避免出现跨线程操作界面导致的异常。】 }); } else { } } 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    1条回答 默认 最新

    • 专家-赤兔[在线] 2024-04-05 10:55
      关注

      引自免费微信小程序:皆我百晓生

      好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的好的

      评论 编辑记录
      编辑
      预览

      报告相同问题?

    • 相关阅读:
      在C#中通过groupby组织List对象成为多级别Json数据
      git--工程备份git仓的使用
      Flutter实用工具Indexer列表索引和Search搜索帮助。
      英雄算法7月27号
      【外汇天眼】交易之路:从无知到觉醒,揭秘成功交易员的五个成长阶段
      mysql中的这些日志,你都知道吗 2?
      原生小程序一键获取手机号
      kubeadm搭建kubernetes(k8s)
      第二部分:聚合根
      Python 科研绘图可视化(后处理)Matplotlib - 2D彩图
    • 原文地址:https://ask.csdn.net/questions/8083718