非UI线程访问控件

非UI线程访问控件

在VS2003之后的版本中,.NET加强了线程安全方面,非UI线程是不能直接访问控件的。这要求我们对控件进行线程安全方式的调用。当然,我们也可以这样做: CheckForIllegalCrossThreadCalls = false (这个属性包含在 System.Windows.Forms 中) 这样,VS就会忽略掉所有关于线程不安全调用的警告。这很方便,但是不是线程安全的。当同时有几个线程访问这个控件时,就会发生意想不到的错误,并不推荐这种解决办法。 MSDN上推荐用这样的方法进行线程安全的调用:
  1. 查询控件的 InvokeRequired 属性。
  2. 如果 InvokeRequired 返回 true,则使用实际调用控件的委托来调用 Invoke。
  3. 如果 InvokeRequired 返回 false,则直接调用控件。
根据这样的方法,写出来的示例: public delegate void AddList(String s); private void Addlist(String s) { if (this.list.InvokeRequired) { AddList d = new AddList(Addlist); this.Invoke(d, new Object[] { s }); } else { this.list.Items.Add(s); } }

转载于:https://www.cnblogs.com/fuis/p/3825510.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值