委托的异步调用

 public delegate void deleGetUserList(object sdf);//定义一个委托

 deleGetUserList du = new deleGetUserList(GetUserList);
             du.BeginInvoke(AdminId, null, null);

 public void GetUserList(Object str)
        {}

 

 

 

异步调用相当于在主线程中开辟了一个新的线程在后台来执行需要异步调用的方法,在这个方法中如果要操作其他控件(比如将文本框填入某一字符串),就 会抛出一个cross-thread异常,这个异常是由于编译器出于安全考虑,不允许不是创建这个控件的线程来调用这个控件(文本框).解决的方法是:

    在这个另外的一个线程中通过使用这个控件的Invoke(Delegate method,params object[] args)方法,Invoke可以调用一个委托,可以在这个委托所代表的方法中对这个控件进行操作;

    Invoke有2个参数,第一个是要执行操作的方法的代理,第二个是要执行操作的方法需要的参数对象数组.

    下面是一个小例子(在按钮事件新建立的线程中对一个文本框写入"helloworld"字符串):

  delegate void AddMsgDel(string msg);
private void button1_Click(object sender, EventArgs e)
{

Thread thread = new Thread(new ThreadStart(Method));
thread.Start();
}
private void Method() {
AddMsgDel del=new AddMsgDel(AddMsg);
textBox1.Invoke(del, new object[] { "helloworld" });
}
public void AddMsg(string msg) {
this.textBox1.Text = msg;
}

转载于:https://www.cnblogs.com/kfjdy/p/3287056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值