Asynchronous calls, NET programming frequently appear, compare yourself to write threads, with asynchronous calls undoubtedly increase development efficiency, but also guaranteed in stability, the commonly used asynchronous call steps are as follows: first is the declaration agent, public delegate string testinvoke ); // Declare a proxy, the method that meets the signature must return a string and write a simple class to verify the result of asynchronous calls PUBLIC CLASS TEST {public string testinvoke () {console.writeline ("Asynchronous call start") Return "Asynchronous Call";} public void testcallback (iv.asyncate);}} DELEGATE BEGININVOKE method is used to start asynchronous calls, the method has two parameters, the first parameter is The callback method of the asynchronous call, the so-called callback method, that is, after the introduction is completed, the background automatically performs the function, the TestCallback method in the top class is a callback method, the method must accept an IASYNCRESULT parameter second parameter is a second parameter is Object. This object will store the AsyncState entity of the IASYNCRESULT object returned by BeginInvoke. IasyncResult can make him as a notice, the return of the notice indicates that the asynchronous call has started, and at the same time, by querying the IASYNCRESULT ISCOMPLETED attribute can be called Do you finish the actual Test Test Tclass = New Test (); testinvoke = new testinvoke (tclass.run); iasyncresult te = _testinvoke.beginInvoke (New AsyncCallback ("This is a callback"), "Test"); string endreturn = _Testinvoke.endinvoke (TE); Console.Writeline (endreturn); then look at the results of the screen print, all understand that you can also change the testinvoke method to a loop, then look at the results, the impression will be more profound, During actual use, it is recommended to write class inherit of IASYNCRESULT, which is more convenient for EndInvoke, which can also detect the exception that BeginInvoke appears during execution, so it is best to use EndInvoke while BeginInvoke.