如果在子线程里使用不是主进程创建的控件

目前本人知道有两种方法,第二种方法虽然简单,但如果是其他关键对象出现这样的错误容易使程序崩溃(有点危言耸听),至少会导致检查不出错误。

一、使用委托实现

1.不带参数的委托

private delegate void MyInvoke()1;//定义一委托

private void LoadNewPict()//需要委托的函数,这函数里就是对线程里不能操作的控件的操作

使用时可以

MyInvoke1 mi = new MyInvoke1(LoadNewPict);

this.Invoke(mi);  //同步委托 受主进程影响

mi.BeginInvoke(null,null);  //异步委托 不受 主进程影响

也可以

this.Invoke(new MyInvoke(LoadNewPict));

 

2.带参数的委托

private delegate void MyInvoke2(string usl,string filename);//定义

使用

MyInvoke2 mi2 = new MyInvoke2(DownFile);

this.Invoke(mi2, "http://localhost/update", file);  //同步委托 受主进程影响

mi2.BeginInvoke("http://localhost/update", file,null,null);  //异步委托  不受 主进程影响

public void DownFile(string URL, string Filename)//下載文件的下載進度條

 二、关闭检查(在构造函数中添加如下代码即可)

Control.CheckForIllegalCrossThreadCalls = false;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值