/***
*回调函数方式:
*启动子线程之后,主线程接着干活,不需要等待
*启动子线程之后,并不影响主线程
*
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace 通过回调函数
{
class Program
{
/// <summary>
/// 委托开启线程,传参,且接受线程的返回数值,用”回调函数“
/// </summary>
public void Test1()
{
Console.WriteLine("使用回调函数方式");
Func<int, int> fu = DownLoadFile;//给委托注册方法
//IAsyncResult表示异步调用的状态
fu.BeginInvoke(200, OnCallBack, fu);
for (int i = 0; i < 6; i++)
{
Thread.Sleep(1000);
Console.WriteLine(i.ToString());
}
Console.ReadLine();
}
//OnCallBack是回调函数,当子线程结束的时候,自动调用
public void OnCallBack(IAsyncResult ar)
{
Func<int, int> res = ar.AsyncState as Func<int, int>;
int intResult = res.EndInvoke(ar);
Console.WriteLine("在回调函数中获取结果 = " + intResult);
}
public int DownLoadFile(int num)
{
Console.WriteLine("下载很多文件");
Thread.Sleep(5000);
return num + 2000;
}
static void Main(string[] args)
{
Program obj = new Program();
obj.Test1();
}
}
}
*回调函数方式:
*启动子线程之后,主线程接着干活,不需要等待
*启动子线程之后,并不影响主线程
*
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace 通过回调函数
{
class Program
{
/// <summary>
/// 委托开启线程,传参,且接受线程的返回数值,用”回调函数“
/// </summary>
public void Test1()
{
Console.WriteLine("使用回调函数方式");
Func<int, int> fu = DownLoadFile;//给委托注册方法
//IAsyncResult表示异步调用的状态
fu.BeginInvoke(200, OnCallBack, fu);
for (int i = 0; i < 6; i++)
{
Thread.Sleep(1000);
Console.WriteLine(i.ToString());
}
Console.ReadLine();
}
//OnCallBack是回调函数,当子线程结束的时候,自动调用
public void OnCallBack(IAsyncResult ar)
{
Func<int, int> res = ar.AsyncState as Func<int, int>;
int intResult = res.EndInvoke(ar);
Console.WriteLine("在回调函数中获取结果 = " + intResult);
}
public int DownLoadFile(int num)
{
Console.WriteLine("下载很多文件");
Thread.Sleep(5000);
return num + 2000;
}
static void Main(string[] args)
{
Program obj = new Program();
obj.Test1();
}
}
}