1 委托(Delegate)+ 调用(Invoke)
public delegate int TakesAWhileDelegate(int data, int ms);//定义委托
int TakesAWhile(int data, int ms)//委托实例
{ }
void Main()
{
TakesAWhileDelegate d1 = TakesAWhile;
IAsynResult as = d1.BeginInvoke(1,3000,null,null)//异步调用
while(!ar.IsCompleted)//委托是否完成
{
}
int result = d1.EndInvoke(ar);
//
while (true)
{
if(ar.AsyncWaitHandle.WaitOne(50,False))//句柄等待
{
}
}
int result = d1.EndInvoke(ar);
d1.BeginInvoke(1,3000,TakesAWhileCompleted,d1);//异步回调
for(int i=0;i<100;i++)
{
console.Write(".");
Thread.Sleep(50);
}
Invoke((EventHandler)(delegate { DisplayMessage(sql_delete); }));///匿名方法直接调用句柄委托
}
static void TakesAWhileCompleted(IAsynResult ar)//回调函数
{
}
//内置委托Action,需要注意的是,Action是没有返回值的
Action<int,int>() a = new Action<int,int>(SetPlcStatus);
Invoke(a,i,j);
void SetPlcStatus(int i,int j)
{
}
//内置委托Func,Func有返回值,Func<T,TResult>
Func<string, string> convertMethod = UppercaseString;
string UppercaseString(string inputString) //被调函数
{ reture inputString.ToUpper();}
Func<T, TResult> 委托与匿名方法一起使用
Func<string, string> convert = delegate(string s)
{ return s.ToUpper();};
//将 lambda 表达式分配给 Func<T, TResult> 委托。
Func<string, string> convert = s => s.ToUpper();
string name = "Dakota";
Console.WriteLine(convert(name));
下面的示例演示如何声明和使用 Func<T, TResult> 委托。 此示例声明一个 Func<T, TResult> 变量,并为其分配了一个将字符串中的字符转换为大写的 lambda 表达式。 随后将封装此方法的委托传递给 Enumerable.Select方法,以将字符串数组中的字符串更改为大写。
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
static class Func
{
static void Main(string[] args)
{
// 声明了一个Func委托类型的变量selector并用Lambda表达式进行实例化
// 这个Lambda表达式将用来获取一个字符串并将这个字符串转化为大写并返回
Func<string, string> selector = str => str.ToUpper(); // 创建一个字符串数组
string[] words = { "orange", "apple", "Article", "elephant" };
// 依次遍历这个字符串数组并调用委托实例selector进行处理
IEnumerable<String> aWords = words.Select(selector);
// 输出结果到控制台
foreach (String word in aWords)
Console.WriteLine(word);
}
}
/*
This code example produces the following output:
ORANGE
APPLE
ARTICLE
ELEPHANT
*/