读书人

关于EndInvoke解决方案

发布时间: 2012-01-03 22:16:06 作者: rapoo

关于EndInvoke
这是一个MSDN上的一个简单的代码,熟悉的可以不看代码
我弄不懂的是EndInvoke方法的参数ThreadId,result,这两个参数有什么用,该方法返回的的值是不是异步调用的方法的返回值,EndInvoke方法的参数个数取决于什么??????????
using System;
using System.Threading;
namespace Examples.AdvancedProgramming.AsynchronousOperations
{
public class AsyncDemo
{
public string TestMethod(int callDuration, out int threadId)
{
Console.WriteLine( "Test method begins. ");
Thread.Sleep(callDuration);
threadId = Thread.CurrentThread.ManagedThreadId;
return String.Format( "My call time was {0}. ", callDuration.ToString());
}

public delegate string AsyncMethodCaller(int callDuration, out int threadId);
public static void Main()
{
int threadId;
AsyncDemo ad = new AsyncDemo();
AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);
IAsyncResult result = caller.BeginInvoke(3000,
out threadId, null, null);
Thread.Sleep(0);
Console.WriteLine( "Main thread {0} does some work. ",
Thread.CurrentThread.ManagedThreadId);
string returnValue = caller.EndInvoke(out threadId, result);//????????
Console.WriteLine( "The call executed on thread {0}, with return value \ "{1}\ ". ",
threadId, returnValue);
Console.ReadLine();
}
}
}


我弄不懂的是EndInvoke方法的参数



[解决办法]
异步通信是不知道什么时候回来什么东西的, 那个threadID就是用来判别某个时候返回来的东西是属于谁的, 因为, 它是惟一的
[解决办法]
楼主光顾着抄代码了,
代码上面就有EndInvoke参数的说明:
-----------------------------
EndInvoke 的参数包括您需要异步执行的方法的 out 和 ref 参数(在 Visual Basic 中为 <Out> ByRef 和 ByRef)以及由 BeginInvoke 返回的 IAsyncResult。
---------------------------------

public string TestMethod(int callDuration, out int threadId)

看到没有?
out int threadId
再加上IAsyncResult,正好是:

caller.EndInvoke(out threadId, result);

读书人网 >C#

热点推荐