3.C#多线程补充(委托Delegate)
来源:互联网 发布:密码框键入数据是 编辑:程序博客网 时间:2024/05/21 14:50
/*
* 1.委托创建线程步骤
* 1.创建一个委托对象,绑定函数
* 2.调用委托对象的BeginInvoke(null,null)函数,有参数的话放到两个null前面
* 3.委托对象调用BeginInvoke(null,null)返回值是一个IAsyncResult类型 用开记录线程的状态
* 4.IAsyncResult IsCompleted函数用来判断指向的线程是否已经结束
* 5.委托对象的 EndInvoke(IAsyncResult) 用来结束线程,获得线程的返回值 参数为指向该线程的状态类型
*/
class Program
{
static int Test(int i)
{
Console.WriteLine("Test");
Thread.Sleep(100); //休眠
return 100;
}
static void Main(string[] args) //
{
//1.通过委托开启线程
Func<int,int> a = Test;//创建委托
IAsyncResult ar = a.BeginInvoke(100,null, null);//开启一个新的线程去执行,a所引用的方法 在两个Null前加上参数
//IAsyncResult 取得当前线程的状态
{
Console.WriteLine(".");
}
int res = a.EndInvoke(ar); //取得异步线程的返回值
Console.WriteLine(res);
}
* 1.委托创建线程步骤
* 1.创建一个委托对象,绑定函数
* 2.调用委托对象的BeginInvoke(null,null)函数,有参数的话放到两个null前面
* 3.委托对象调用BeginInvoke(null,null)返回值是一个IAsyncResult类型 用开记录线程的状态
* 4.IAsyncResult IsCompleted函数用来判断指向的线程是否已经结束
* 5.委托对象的 EndInvoke(IAsyncResult) 用来结束线程,获得线程的返回值 参数为指向该线程的状态类型
*/
class Program
{
static int Test(int i)
{
Console.WriteLine("Test");
Thread.Sleep(100); //休眠
return 100;
}
static void Main(string[] args) //
{
//1.通过委托开启线程
Func<int,int> a = Test;//创建委托
IAsyncResult ar = a.BeginInvoke(100,null, null);//开启一个新的线程去执行,a所引用的方法 在两个Null前加上参数
//IAsyncResult 取得当前线程的状态
Console.WriteLine("Main");
//1.检测线程是否执行结束,并获得返回值,
//第一种方法
while (ar.IsCompleted == false) //如果当前线没有实行完毕{
Console.WriteLine(".");
}
int res = a.EndInvoke(ar); //取得异步线程的返回值
Console.WriteLine(res);
Console.ReadKey();
//第二种
Func<int, int> a = Test;
//倒数第二个参数是一个委托类型的参数,当线程结束的时候会调用这个委托指向的方法
//倒数第一个参数是给回调函数传递参数
//C# 的lambda (参数序列) =>{ } 参数个数为1的话 不用加括号也可以
a.BeginInvoke(100, ar => {
int res = a.EndInvoke(ar);
Console.WriteLine(res + "在Lambda表达式中获得函数返回值");
}, null);
//第三种
//1000毫秒表示超时时间,如果1000没有结束,就返回false,如果结束返回True
bool isEnd = ar.AsyncWaitHandle.WaitOne(1000);
int res = a.EndInvoke(ar);
}
0 0
- 3.C#多线程补充(委托Delegate)
- c# delegate(委托)与多线程
- C# Delegate(委托)与多线程
- C# Delegate(委托)与多线程
- C# Delegate(委托)与多线程
- C# Delegate/委托 与多线程
- C# Delegate/委托 与多线程
- C# Delegate(委托)与多线程
- C# Delegate(委托)与多线程
- C# Delegate(委托)与多线程
- C# Delegate/委托 与多线程
- C# Delegate(委托)与多线程
- C# Delegate(委托)与多线程
- Unity中用到的C#补充(六)- Delegate委托
- C# 委托(delegate)
- Delegate 委托 C#
- C# 委托(Delegate)解析
- C#委托delegate使用
- [剑指Offer]面试题35:第一个只出现一次的字符
- xml文件报错找不到资源(字符串、变量)解决方法(尚未解决,待续)
- iOS 推送,证书申请,本地推送
- 简单聊天界面
- gcc与make
- 3.C#多线程补充(委托Delegate)
- HIVE的简介
- Java程序StringBuilder的效率,验证字符串操作和字符串生成器的操作效率
- 一点一滴分析LinkIt™ Smart 7688 编译环境
- Leetcode #17 Letter Combinations of a Phone Number Z9键盘字母组合解题小节
- Windows上已经删除的文件并没有消失并且再次删除却提示无法找到该项目的解决办法
- ASMC(异步静态存储控制器)
- CSS实现等比例缩放的盒子
- 虚拟机centos6.6静态ip配置