您的位置:首页 > 编程语言 > C#

C#中委托

2016-04-19 22:45 253 查看
class Program
{
/*
*这是需要异步执行的方法,COPY一个文件
*/
public void CopyFile(String fileName, out bool result)
{
Console.WriteLine("Move file " + fileName + "...");
for (int i = 0; i < 10; i++)
{
Thread.Sleep(200);
Console.WriteLine("Move file is running..." + i);
}
Console.WriteLine("Move file finished");
result = true;
}
/*
*定义COPY文件的委托,将来CopyFile方法就委托给它去异步执行
*/
public delegate void CopyFileDelegate(String fileName, out bool result);
static void Main(string[] args)
{
bool result;
Program aa = new Program();
// 开始委托方法,以后都由copyFile这个变量来做事
CopyFileDelegate copyFile = new CopyFileDelegate(aa.CopyFile);

Console.WriteLine("[Main] Invoking the asynchronous " + " Copy file method");
//委托调用异步方法去执行
IAsyncResult iAR = copyFile.BeginInvoke("songlin.txt", out result, null, null);

// 主方法不用等待COPY FILE方法,继续自己的事情
Console.WriteLine("[Main] Doing other work");
for (int i = 0; i < 10; i++)
{
Thread.Sleep(200);
Console.WriteLine("[Main]MainMethod is running..." + i);
}

Console.WriteLine(" [Main] Waiting for file transformation to finish");
/* 主方法自己的事情做完,开始检查COPYFILE有没有完成。
* 使用它的 WaitOne 方法将执行一直等到发出 WaitHandle 信号,然后调用 EndInvoke。
* 注意:异步调用完成时会发出 WaitHandle 信号,可以通过WaitOne 来等待它*/
iAR.AsyncWaitHandle.WaitOne();

Console.WriteLine("[Main] Copy file finished, cleaning up");
/* EndInvoke 方法用于检索异步调用结果。调用 BeginInvoke 后可随时调用 EndInvoke 方法;
* 如果异步调用未完成,EndInvoke 将一直阻塞到异步调用完成。
*/
copyFile.EndInvoke(out result, iAR);

Console.WriteLine("[Main] The result is {0}", result);
Console.ReadLine();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: