下面有一个例子,子线程干一件事情,做完了通知主线程
public class Program
{
//定义一个为委托
public delegate void Entrust(string str);
static void Main(string[] args)
{
Entrust callback = new Entrust(CallBack); //把方法赋值给委托
Thread th = new Thread(Fun);
th.IsBackground = true;
th.Start(callback);//将委托传递到子线程中
Console.ReadKey();
}
private static void Fun(object obj) {
//注意:线程的参数是object类型
for (int i = 1; i <= 10; i++)
{
Console.WriteLine("子线程循环操作第 {0} 次",i);
Thread.Sleep(500);
}
Entrust callback = obj as Entrust;//强转为委托
callback("我是子线程,我执行完毕了,通知主线程");
//子线程的循环执行完了就执行主线程的方法
}
//主线程的方法
private static void CallBack(string str)
{
Console.WriteLine(str);
}
}
namespace ConsoleTest
{
public delegate void MyCallback();
class Program
{
//主线程方法
static void Main(string[] args)
{
MyCallback d = new MyCallback(ExecAction);//创建一个委托对象
ParameterizedThreadStart ts = new ParameterizedThreadStart((obj) =>
{
Console.Write("子线程执行");
MyCallback del = (MyCallback)obj;
//之线程执行完毕执行委托方法通知主线程
del();
});
Thread t = new Thread(ts);
t.Start(d);
Console.Read();
}
//主线程的方法
public static void ExecAction()
{
Console.Write("亲爱的主线程,那么名字叫t的子线程执行完毕了!");
}
}
}