Here is a simple demo by using delegate.
class Program{ public delegate void Entrust(); static void Main(string[] args) { Entrust callback = new Entrust(Timer1Complete); Thread th = new Thread(ProcessTimer1); th.IsBackground = true; th.Start(callback); // time-consuming operations in main thread for (int i = 1;i< 10;i++) { Console.WriteLine("main {0}", i); Thread.Sleep(500); } // time-consuming operations in main thread Console.ReadKey(); } private static void ProcessTimer1(object obj) { // time-consuming operations in sub thread for (int i = 1; i <= 5; i++) { Console.WriteLine("sub {0}", i); Thread.Sleep(500); } // time-consuming operations in sub thread Entrust callback = obj as Entrust; callback(); } private static void Timer1Complete() { Console.WriteLine("cause the Timer1Complete method to execute"); }}
Class SurroundingClass Public Delegate Sub Entrust() Private Shared Sub Main(ByVal args As String()) Dim callback As Entrust = New Entrust(AddressOf Timer1Complete) Dim th As Thread = New Thread(AddressOf ProcessTimer1) th.IsBackground = True th.Start(callback) For i As Integer = 1 To 10 Console.WriteLine("main {0}", i) Thread.Sleep(500) Next Console.ReadKey() End Sub Private Shared Sub ProcessTimer1(ByVal obj As Object) For i As Integer = 1 To 5 Console.WriteLine("sub {0}", i) Thread.Sleep(500) Next Dim callback As Entrust = TryCast(obj, Entrust) callback() End Sub Private Shared Sub Timer1Complete() Console.WriteLine("cause the Timer1Complete method to execute") End SubEnd ClassIn VB.NET