Inisde BeginInvoke
,AsyncResult.AsyncDelegate
後回調需要被轉換爲適當的類型,只有然後EndInvoke
是可訪問的。c#調用endallvoke在回調,使用泛型
但我使用泛型,所以我需要爲N個廣義方法定義N個回調?
這是類:
public class Async
{
public delegate object Func(); //void with no parameter
public delegate TResult Func<T, TResult>(T arg); //one parameter with result
public static void Execute(IAsyncSubscriber subscriber, Func action)
{
action.BeginInvoke(Callback, subscriber);
}
public static void Execute<T, T1>(IAsyncSubscriber subscriber, T param, Func<T, T1> action)
{
action.BeginInvoke(param, Callback, subscriber);
}
private static void Callback(IAsyncResult ar)
{
AsyncResult result = (AsyncResult)ar;
IAsyncSubscriber subscriber = (IAsyncSubscriber)result.AsyncState;
Func action = (Func) result.AsyncDelegate;
object returnValue = action.EndInvoke(result); //To call endinvoke
subscriber.Callback(returnValue);
}
}
如果我理解正確的話,你的假設是正確的。您將需要定義'N'回調。在光明的一面,你只會做這一次,所以沒有biggy,只是一個重複的工作:) – leppie 2012-07-09 10:19:53
好的,謝謝!你可以移動你的評論來回答,我會關閉這個。 – 2012-07-09 10:37:40