Imports System
Imports System.Threading
Imports System.Runtime.InteropServices
Public Class AsyncDemo
Public Function TestMethod(ByVal callDuration As Integer,<Out> ByRef threadId As Integer) As String
Console.WriteLine("Test method begins.")
Thread.Sleep(callDuration)
threadId = Thread.CurrentThread.ManagedThreadId()
return String.Format("My call time was {0}.", callDuration.ToString())
End Function
End Class
Public Delegate Function AsyncMethodCaller(ByVal callDuration As Integer,<Out> ByRef threadId As Integer) As String
Public Class AsyncMain
Shared Sub Main()
Dim threadId As Integer
Dim ad As New AsyncDemo()
Dim caller As New AsyncMethodCaller(AddressOf ad.TestMethod)
Dim result As IAsyncResult = caller.BeginInvoke(3000,threadId, Nothing, Nothing)
Thread.Sleep(30)
result.AsyncWaitHandle.WaitOne()
Dim returnValue As String = caller.EndInvoke(threadId, result)
result.AsyncWaitHandle.Close()
Console.WriteLine(threadId)
Console.WriteLine(returnValue)
End Sub
End Class
|