好的我正在使用HttpWebRequest BeginGetResponse并且我传入异步回调函数,现在我想传入一个变量/上下文,我想要我的回调函数来获取。我该怎么做呢。我对C#/ .Net / Silverlight世界还不熟悉。
HttpWebRequest absRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri(urlToFetch));
absRequest.BeginGetResponse(new AsyncCallback(onABSFetchComplete), absRequest);
这里我的目标是在上面的调用中我想传递一个变量,我希望我的回调被调用该变量。 谢谢!
答案 0 :(得分:2)
最简单的方法是使用lambda表达式。像这样:
absRequest.BeginGetResponse(result => OnFetchComplete(result, foo, absRequest),
null);
其中OnFetchComplete
现在拥有真正想要的签名(带有额外参数 - 在这种情况下,一个对应于foo
),而不仅仅是IASyncResult
。您不再需要将absRequest
作为IAsyncResult
的“上下文”,因为您正在lambda表达式中捕获它。
如果你不熟悉lambda表达式,你应该花时间去掌握它们 - 不仅仅是为了这个,而是为了LINQ和各种其他目的。