Home  >  Article  >  Backend Development  >  Graphical code example of asynchronous call of c# delegate

Graphical code example of asynchronous call of c# delegate

黄舟
黄舟Original
2017-03-04 10:17:411628browse

Asynchronous calls of delegates

Sometimes, if you want the delegate to complete a complex and time-consuming task When performing tasks, synchronous calling is not a good choice, because users will face boring time consumption and long (relatively speaking)'s waiting. At this time, the asynchronous call of the delegate shows its advantages. The asynchronous call of the delegate C# is also encapsulated, through beginInvoke and endInvke to complete. An example is given below.

1. ## defines a delegate,myDelegate

##2.                                                 An event is defined for external subscription3.                                                               ##Increment

, test field4.                          doIt method,

increment

will be incremented every time it is called, when the value is 5 When , the event is called asynchronously The key point is this code: ##

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

The function contains four parameters: AsyncCallback

Object: This parameter means to tell it what to do next when the callback is completed, so you need to pass it a method.


new AsyncCallback(

Receive a method here, here I used lambdaExpression)

. ObjectObject: The parameters to be passed to the method called when the callback ends.

AsyncResult ar = (AsyncResult)ia;////Get the incoming IasyncResult and convert it into an AsyncResult object

MyDelegate md = ar.AsyncDelegate as MyDelegate;////Get callBackObject

int r = md.EndInvoke(ia);////End the delegate call and get the return value

MessageBox.Show(r.ToString() + ia.AsyncState);////Verify whether the return value is obtained

##OK Now that the asynchronous delegation has been defined, the next step is to call:

Code description:

##Newatimer and a asyntroniseDelegate object.

Subscribe to the callBack event. At the end of the method, a 1 is returned. .

Use timer to complete the cumulative operation of increment, Accumulate 1 every second.

When increment accumulates to 5, callbackThe event is triggered. At this time, it is asked to perform a very complex task, looping 10 billion times.

After running, you will see ## prompt box, followed by # #, after about 2-3 seconds the prompt box appears, and then and ## (visible, asynchronous call Finally, we successfully obtained the return value of the method)

The above is the asynchronous call of the c# delegate Contents of graphic code examples, please pay attention to the PHP Chinese website (www.php.cn) for more related content!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn