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

时间:2010-09-29 06:23:38

标签: c# .net silverlight

好的我正在使用HttpWebRequest BeginGetResponse并且我传入异步回调函数,现在我想传入一个变量/上下文,我想要我的回调函数来获取。我该怎么做呢。我对C#/ .Net / Silverlight世界还不熟悉。

 HttpWebRequest absRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(urlToFetch));
        absRequest.BeginGetResponse(new AsyncCallback(onABSFetchComplete), absRequest);

这里我的目标是在上面的调用中我想传递一个变量,我希望我的回调被调用该变量。 谢谢!

1 个答案:

答案 0 :(得分:2)

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

absRequest.BeginGetResponse(result => OnFetchComplete(result, foo, absRequest),
                            null);

其中OnFetchComplete现在拥有真正想要的签名(带有额外参数 - 在这种情况下,一个对应于foo),而不仅仅是IASyncResult 。您不再需要将absRequest作为IAsyncResult的“上下文”,因为您正在lambda表达式中捕获它。

如果你不熟悉lambda表达式,你应该花时间去掌握它们 - 不仅仅是为了这个,而是为了LINQ和各种其他目的。