委托开启一个线程,参数传递,以及获取线程的返回数值。
例:
Func<int, int> ac = ThreadMethod3;
//IAsyncResult 表示获得当前线程的状态
IAsyncResult ar= ac.BeginInvoke(88, null, null);
While(!ar.IsCompleted)
{
Console.Write(“.”);
Thread.Sleep(10);
}
//取得结果
int intResult = ac.EndInvoke(ar);
Console.WriteLine(“线程3执行后返回结果: “ + intResult);
源代码:
/***
*同步:打电话,同时发生
*异步:发QQ,两个线程可以不同时进行,会更方便一些
*
*
*
*
*
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace 委托异步调用线程且等待返回数值
{
class Program
{
/// <summary>
/// 委托开启线程,传参,且接受线程的返回数值,使用状态结果
/// </summary>
public void Test1()
{
Func<int, int> fu = DownLoadFile;//给委托注册方法
//IAsyncResult表示异步调用的状态
IAsyncResult result = fu.BeginInvoke(100, null, null);
//前台线程在等后台线程的完成
while (!result.IsCompleted)
{
Console.Write(".");
Thread.Sleep(10);
}
Console.WriteLine("\n");
//取得结果
int intResult = fu.EndInvoke(result);
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();
Console.ReadKey();
}
}
}