在Winform中线程更新UI线程

例如:Form中有一个DataGridView,我们使用Thread查询后,更新这个表格,如果在Thread中直接更新会报错。

Thread th = new Thread((object para) =>
{
List<GetBatAddNumberRetModels> ret = Api.Send("xxx", "xxx", para.GetString(), sendType.json).UNZIP().formatJson<List<GetBatAddNumberRetModels>>();
DataTable dt = smsTable.Clone();
foreach (var m in ret)
{
var temp = common.smsTempList.Where(k => k.id == m.smsId).FirstOrDefault();
DataRow row = dt.NewRow();
row["sms_check"] = false;
row["sms_number"] = m.nmb.GetString();
row["sms_batid"] = m.id.Int64();
row["sms_submitdate"] = m.date.ToString("yyyy-MM-dd HH:mm:ss");
row["sms_tempname"] = temp != null ? temp.name : "";
row["sms_auth"] = Enum.GetName(typeof(smsAuthedEnum), m.smsAuthed);
row["sms_expdate"] = m.smsExpDate == DateTime.MinValue ? "" : m.smsExpDate.ToString("yyyy-MM-dd HH:mm:ss");
row["sms_senddate"] = m.smsSendDate > DateTime.MinValue ? m.smsSendDate.ToString("yyyy-MM-dd HH:mm:ss") : "";
row["sms_sendstatus"] = Enum.GetName(typeof(smsSendStatusEnum), m.smsSendStauts);
row["sms_tempid"] = m.smsId;
row["sms_result"] = m.smsAuthInfo.GetString().Trim();
row["sms_smstype"] = m.smsExtType.GetString().Trim();
row["sms_smsleave"] = m.smsExtLeave.GetString().Trim();
row["sms_smsactive"] = m.smsExtActive.GetString().Trim();
dt.Rows.Add(row);
}
if (this.IsHandleCreated)
{
this.BeginInvoke(new EventHandler(delegate(Object sd, EventArgs ag)
{
DataTable tab = (DataTable)sd;
smsView.DataSource = tab;
}), new object[] { dt });
}
});
th.IsBackground = true;
th.Start(JsonConvert.SerializeObject(query));

  

c# Winform Invoke 的用法的更多相关文章

  1. C#中Invoke的用法2

    在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...

  2. (转)C#中Invoke的用法 一

    在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...

  3. C#中Invoke的用法()

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...

  4. C#中Invoke的用法

    在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫"打开",单击之后按钮上的文本显示 ...

  5. (@WhiteTaken)Unity中Invoke的用法

    今天无意间读到大神写的代码,看到了Invoke函数,于是产生兴趣.后来才明白自己要学习的东西还有很多. 下面讲用法. Invoke是延时调用函数,在用Invoke函数之前需要引入命名空间using U ...

  6. C#中Invoke的用法1

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解.  首先说下,invoke和be ...

  7. [转载]C#中Invoke的用法()

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...

  8. C#中Invoke的用法()-解决子线程访问主线程控件、线程安全等问题

    引自https://www.cnblogs.com/lsgsanxiao/p/5523282.html invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概 ...

  9. C#中Invoke的用法(转)

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和beg ...

随机推荐

  1. less封装样式有规律的类选择器-遁地龙卷风

    1.解决的问题 .class-rule(p,2,width 20px animation-dely 0.1s);可以生成下列css样式 .p2 { animation-dely: 0.2s; widt ...

  2. 常用数据库:MongoDB

    下载地址:https://www.mongodb.com/download-center/community 安装及配置指南:https://docs.mongodb.com/manual/insta ...

  3. 学习笔记-canny边缘检测

    Canny边缘检测 声明:阅读本文需要了解线性代数里面的点乘(图像卷积的原理),高等数学里的二元函数的梯度,极大值定义,了解概率论里的二维高斯分布 1.canny边缘检测原理和简介 2.实现步骤 3. ...

  4. WPF入门之一APP.XAML

    WPF运行之后,App.xaml是应用的声明起始点. 一.指定入口 通过指定Application 的StartupUri属性,指示了启动应用的时候,加载哪个窗口或网页. 最常见的就是将默认的Main ...

  5. Shell学习笔记(二)

    if 语句 最简单的用法就是只使用 if 语句,它的语法格式为: if condition then statement(s) fi condition是判断条件,如果 condition 成立(返回 ...

  6. SpingBoot+Mybaits+Vue,更新学习

    1.DTO 2.实体类 3.Controller层,UpdatePrize/{id}为接口 4.Service层 5.Impl实现层 之后就可以更新数据了. 6.Vue链接接口 7.请求,解析,返回值 ...

  7. docker简单介绍----Dockerfile命令

    DockerFile的组成部署: 下面优先介绍下Dcokerfile的基础指令 一.CMD指令:容器启动时要莫热门运行的命令,如果有多个CMD指定,最后一个生效 使用方法: CMD ["ex ...

  8. java程序设计第二次作业

  9. GraphQL 01--- GraphQL 介绍及资源总结

    作为一位web开发人员,在使用REST API的时候,是否遇到过这样的问题: 1.调用一个API的时候,总是会返回一些不需要的信息. 2. 对于一个资源的调用,如果想获取到更多的信息,可能需要发送多次 ...

  10. Nginx负载-nginx转发到Swoole服务器(nginx配置文件变更)