2010-09-29 4 views
0

Хорошо Я использую HEGWebRequest BeginGetResponse, и я передаю функцию обратного вызова async, теперь я хочу передать переменную/контекст как хорошо, что я хочу получить свою функцию обратного вызова. Как мне это сделать. Я довольно новичок в мире C# /. Net/Silverlight.C#/Silverlight: Я хочу передать переменную, которую я хочу использовать в функции обратного вызова async

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

здесь моя цель заключается в вызове выше, я хочу передать переменный, и я хочу, чтобы мой обратный вызов дозвонился с этим переменным. спасибо!

+0

Как я могу достичь функциональности только на C# .NET без ASP.NET (например, httpWebRequest ... и т. Д.)? – venkat

ответ

2

Простейший способ сделать это - использовать выражение лямбда. Что-то вроде этого:

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

где OnFetchComplete теперь имеет подпись вы действительно хотите (с дополнительными параметрами - в этом случае, если один, соответствующий foo), а не просто IASyncResult. Вам больше не нужно указывать absRequest как «контекст» для IAsyncResult, так как вы захватываете его в выражении лямбда.

Если вы не знакомы с лямбда-выражениями, вам действительно нужно потратить время, чтобы справиться с ними, хотя и не только для этого, но и для LINQ и для любых других целей.

+0

Большое спасибо за решение, и я обязательно прочитаю об этом. – gforg

+0

Как я могу достичь функциональности только на C# .NET без ASP.NET (например, httpWebRequest ... и т. Д.)? – venkat

+0

@sukumar: HttpWebRequest уже имеет функцию BeginGetResponse. Это не часть ASP.NET. –

Смежные вопросы