“线程间操作无效: 从不是创建控件的线程访问它”的解决措施及delegate的用法

先说笔者遇到这个报错信息的背景。笔者开多线程读取数据,在新的线程中调用函数直接对TextBox进行刷新,就会报此错误。

原因即是我们创建TextBox的进程称为主线程的话,另外开设的线程即为分线程,不同线程创建的东东不能跨线程操作。遇到这种情况,推荐的方法是用代理。代理也是C#一个安全的指针。

代理或者叫做委托,英文都是delegate,用法比较简单。比如我们先定义一个显示函数,向TextBox中添加字符串。如下,函数写在了main.cs中

然后我们声明代理,要求代理的返回值为void类型,同时输入参数和其想代理的函数的输入参数一样,比如我们的AddTxt的参数为(string txt),则我们的代理也需要是string类型

如下:


接下来我们在线程中声明代理的一个对象即可,如下,语句写在了想直接刷新ListView的线程中。


接着在想调用对TextBox刷新的地方,也就是想用AddTxt函数的地方(注意直接在线程中用AddTxt就会报题目所说的错误),改为如下函数


BeginInvoke是System.Windows.Forms的中的函数,是系统自己的,用法就是调用代理时,前面的参数是代理对象,后面是传入的参数。

运行下,无报错,成功



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值