此示例演示使用线程回调方法
using System;
using System.Threading;
using System.Runtime.Remoting.Messaging;
namespace 回调
{
//委托声明(函数签名)
delegate string MyMethodDelegate();
class MyClass
{
//调用的方法
public static string MyMethod()
{
//Console.WriteLine(System.Threading.Thread.CurrentThread.IsBackground);
for(int i = 0;i < 3; i++) //延长时间(模拟实际任务)
{
Thread.Sleep(1000);
}
return "Hello Word";
}
//声明委托,调用MyMethod
private static MyMethodDelegate d = new MyMethodDelegate(MyClass.MyMethod);
//声明委托,调用AsyncCallbackMethod
private static System.AsyncCallback a = new System.AsyncCallback(MyClass.AsyncCallbackMethod);
[STAThread]
static void Main(string[] args)
{
d.BeginInvoke(a,null);
Console.ReadLine(); //这句不能去掉,否则主线程执行完成后,子线会会强迫调用Abort()方法销毁掉,也就执行不到回调方法了
}
public static void AsyncCallbackMethod(System.IAsyncResult myIAsyncResult)
{
string strEnd = d.EndInvoke(myIAsyncResult); //委托调用的方法已经完成,输出其值
Console.WriteLine(strEnd);
Console.Read();
}
}
}
本示例代码已经测试,能够正常运行!
新闻热点
疑难解答