在做界面程序时,常常需要一些数据类,界面元素通过绑定等方式显示出数据,然而由于UI线程不是线程安全的,一般都需要通过Invoke等方式来调用界面控件。但对于数据绑定bindingList而言,没法响应listchang事件,导致后端的grid等控件不能更新数据。废了好大的劲终于找到一个UIBindingList,实现线程数据的同步!

using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;namespace TempForms
{public partial class Form1 : Form { public Form1() { InitializeComponent(); Initial(); } private UiBindList<int> _list; private void Initial() { _list = new UiBindList<int> { SynchronizationContext = SynchronizationContext.Current }; bindingSource1.DataSource = _list; new Thread(() => { while (true) { Thread.Sleep(1000); var newItem = DateTime.Now.Second; _list.Add(newItem); Thread.Sleep(1000); _list.Remove(newItem); } }) { IsBackground = true, } .Start(); } } /// <summary> /// 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件”异常 /// </summary> class UiBindList<T> : BindingList<T> { /// <summary> /// 界面同步上下文 /// </summary> public SynchronizationContext SynchronizationContext { get; set; } /// <summary> /// 使用此方法执行一切操作上下文相关的操作 /// </summary> private void Excute(Action action, object state = null) { if (SynchronizationContext == null) action(); else SynchronizationContext.Post(d => action(), state); } public new void Add(T item) { Excute(() => base.Add(item)); } public new void Remove(T item) { Excute(() => base.Remove(item)); } } }

转载于:https://www.cnblogs.com/swordzj/p/3917875.html

扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常...相关推荐

  1. cms自动更新php文件,织梦cms内容页修改或者删除文章之后自动更新上下篇或者首页...

    织梦CMS后台修改.删除文章后自动更新首页和相应列表页.织梦后台只能开启发布后更新主页,列表,和上下页.有时候我们需要在编辑时也能更新想要的,这样不用每次去生成. 使用织梦CMS建站时我们通常会需要删 ...

  2. 线程访问 DevExpress控件异常时 解决方法

    线程访问 DevExpress控件异常时 解决方法 Control.CheckForIllegalCrossThreadCalls = false; DevExpress.Data.CurrencyD ...

  3. 【已解决】Word转换PDF时自动更新域导致图片表格的引用编号全部乱掉

    问题背景 最近在排版毕业设计,因为有很多图片和表格,为了省事,直接在文中引用图片,表格,就不用编号了,(这个时候文章的一级标题是'第1章'),但是学校要求一级标题的格式为"第一章" ...

  4. MySQL:让表的时间字段在insert和update时自动更新

    让字段自动更新为当前时间戳: --insert时若不指定updated值,则插入当前时间 CREATE TABLE `test_update` (`id` int(32) NOT NULL,`upda ...

  5. idea配置Maven的本地仓库(打开新的项目时自动更新本地仓库的位置)

    配置Maven的本地仓库 一.打开目录然后选择 Other Settings → Settings for New Projects 二.配置自己的文件路径和本地仓库 三.设置每次自动更新本地仓库

  6. 如何设置某些动作在凌晨12点时自动更新

    先定义一个方法timeShow() 当时写这个功能的时候是在react框架的项目里,然后用到了es6的箭头函数和let timeShow = () => { let timeNow = new ...

  7. DataGrid 或 DataView 中删除项时告知是否删除

    <asp:ButtonColumn Text="<div id=de οnclick="javascript:return confirm('是否删除...');&qu ...

  8. wps论文参考文献变动时自动更新

    按照常规的交叉引用方法,将参考文献插入到文章中,如下所示 Chen等[11]提出的基于经验矩阵的特征,以及Dong等[12]提出的基于游程的特征等. Harmsen等[13]提出的基于直方图特征函数质 ...

  9. server sql 将出生日期转为年龄_在sql server表中有一个出生日期字段我怎么才能在当前年份改变时自动更新年龄字段...

    先说明下 identity(1,1):自动+1 foreign key 外键语法 create database ztx use ztx Create Table QAUser--baidu用户资料 ...

  10. [JetBrains Rider] 在保存文件时自动更新文件头的方法

    首先要创建一个文件头模板,保存 然后需要新建一个 Code CleanUp 行为,只有这样才能点开 Update file header 行为 新建完成,保存 在 保存时行为 中选择刚刚新建的行为,保 ...

最新文章

  1. 360金融发布Q2财报:净利6.92亿,同比增长114%,大数据与AI加持的科技服务是新亮点?
  2. PTA基础编程题目集-6-5 求自定类型元素的最大值
  3. PHP读取MySQL数据生成Excel文件实例
  4. clusterProfiler对差异表达基因进行富集分析
  5. Java 面试知识点解析(七)——Web篇
  6. dlink打印服务器重置,单口打印服务器 D-Link DP-302简析
  7. python数据结构 树_python数据结构之二叉树的统计与转换实例
  8. GDCM:gdcm::XMLPrinter的测试程序
  9. Spark(2)——小用RDD
  10. 3001基于哈夫曼树的数据压缩算法(附思路及注释)
  11. .Net魔法堂:史上最全的ActiveX开发教程——部署篇
  12. mysql5.5数据备份_MySql5.5备份和还原
  13. centos 5 手动分区来安装系统的方法
  14. MYSQL初学者命令行使用指南
  15. 基于genius框架的智能代理(intelligence agent)在IDE平台上的编辑
  16. 关于VC6.0一些常见问题和解决方案
  17. Android之ViewStub
  18. dbv工具连接oracle10g,10.2.2 DBV工具
  19. -bash: vim: 未找到命令
  20. cms系统是什么,用哪个比较好。

热门文章

  1. python通过文件路径读取图片
  2. Linux Ubuntu 下安装与卸载 JDK,亲测有效~
  3. 目标检测|YOLOv2原理与实现(附YOLOv3)
  4. caffe的googlenet模型使用
  5. 用Python做图像处理(PIL库的使用)
  6. windows10下搭建spark平台
  7. 第一个简单的Servlet
  8. java debug try catch 打印发生错误的代码的详细信息 代码行数
  9. 数据库 并发 悲观锁 乐观锁 是什么 区别
  10. multism中ui和uo应该怎么表示_第310 这四个常考英语单词,到底表示时间还是地点?...