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 Sub End Class In VB.NET