子线程执行完后通知主线程

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
View Code
原文地址:https://www.cnblogs.com/jizhiqiliao/p/9968321.html