托付的异步挪用
偶然,假如要让托付去完成一个庞杂耗时的使命时,同步挪用不是一个好的挑选,由于如许用户面对的是无聊的时刻斲丧和冗长(相对来说)的守候。这时刻托付的异步挪用就表现出了上风,关于托付的异步挪用C#也做了封装,经由过程beginInvoke和endInvke来完成。下面给出一个例子。
1. 定义了一个托付,myDelegate
2. 定义了一个事宜用于外部定阅
3. Increment,测试字段
4. doIt要领,每次被挪用时increment都邑自增,当值为5时,异步挪用事宜
IAsyncResult result = this.callBack.BeginInvoke (new AsyncCallback( (ia) => { MessageBox.Show("completed"); AsyncResult ar = (AsyncResult)ia; MyDelegate md = ar.AsyncDelegate as MyDelegate; int r = md.EndInvoke(ia); MessageBox.Show(r.ToString() + ia.AsyncState); }), "message"); MessageBox.Show("begin invoke");
BeginInvoke函数包括四个参数:
AsyncCallback对象:这个参数的意义是,通知它当回调完成时,下一步该做什么,因而须要通报给它一个要领。new AsyncCallback(此处吸收一个要领,这里我用了lambda表达式)。
Object对象:要通报给回调完毕时所挪用要领的参数。
AsyncResult ar = (AsyncResult)ia;////取得传入的IasyncResult,转化为AsyncResult对象
MyDelegate md = ar.AsyncDelegate as MyDelegate;////取得callBack对象
int r = md.EndInvoke(ia);////完毕托付的挪用,取得返回值
MessageBox.Show(r.ToString() + ia.AsyncState);////考证是不是取到了返回值
OK,如今关于异步托付已定义好了,下一步就是挪用了:
New一个timer和一个asyntroniseDelegate对象。
定阅callBack事宜,要领末了,返回了一个1。
用timer完成increment累加的操纵,每一秒累加1。
当increment累加到5的时刻,callback事宜触发,此时让它去实行一个很庞杂的使命,轮回了10亿次。
运转以后,将会看到的提示框,紧接着是,约莫过了2-3秒提示框涌现,然后是和(可见,异步挪用的末了,我们胜利的取得了要领的返回值)
以上就是c#托付的异步挪用的图文代码示例的内容,更多相关内容请关注ki4网(www.ki4.cn)!