C#/Silverlight:我想传递一个我想在异步回调函数中使用的变量

C#/Silverlight:我想传递一个我想在异步回调函数中使用的变量,c#,.net,silverlight,C#,.net,Silverlight,好的,我正在使用HttpWebRequest BeginGetResponse并传入异步回调函数,现在我想传入一个变量/上下文,我想让回调函数得到它。我该怎么做呢。我对C#/.Net/Silverlight的世界还相当陌生 HttpWebRequest absRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(urlToFetch)); absRequest.BeginGetResponse(new AsyncCall

好的,我正在使用HttpWebRequest BeginGetResponse并传入异步回调函数,现在我想传入一个变量/上下文,我想让回调函数得到它。我该怎么做呢。我对C#/.Net/Silverlight的世界还相当陌生

 HttpWebRequest absRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(urlToFetch));
        absRequest.BeginGetResponse(new AsyncCallback(onABSFetchComplete), absRequest);
这里我的目标是在上面的调用中,我想传递一个变量,我想用这个变量调用我的回调。
谢谢

最简单的方法是使用lambda表达式。大概是这样的:

absRequest.BeginGetResponse(result => OnFetchComplete(result, foo, absRequest),
                            null);
其中,
OnFetchComplete
现在具有您真正想要的签名(带有额外的参数-在本例中,一个对应于
foo
),而不仅仅是一个
IASyncResult
。在lambda表达式中捕获IAsyncResult时,不再需要将
absRequest
作为
IAsyncResult
的“上下文”


如果您不熟悉lambda表达式,那么您应该花点时间来掌握它们——不仅仅是为了这个,也是为了LINQ和其他各种目的。

非常感谢解决方案的有效性,我肯定会详细了解这一点。如果没有ASP.NET,我如何单独在C#.NET中实现功能(如httpWebRequest…等)?@sukumar:httpWebRequest已经开始响应。这不是ASP.NET的一部分。如果没有ASP.NET(如httpWebRequest…等),我如何在C#.NET中单独实现功能?