2010-09-29 2 views
0

Ok J'utilise HttpWebRequest BeginGetResponse et je passe dans la fonction de rappel asynchrone, maintenant je veux passer dans une variable/contexte bien que je veux à ma fonction de rappel pour obtenir. Comment puis-je faire cela. Je suis relativement nouveau dans le monde C#/.Net/Silverlight.C#/Silverlight: Je veux passer une variable que je veux utiliser dans la fonction de rappel asynchrone

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

ici mon objectif est dans l'appel ci-dessus, je veux passer une variable et je veux que mon rappel à être appelée avec cette variable. merci!

+0

Comment puis-je réaliser la fonctionnalité dans C# .NET seul sans ASP.NET (comme httpWebRequest ... etc.)? – venkat

Répondre

2

La méthode la plus simple consiste à utiliser une expression lambda. Quelque chose comme ceci:

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

OnFetchComplete a maintenant la signature que vous vraiment besoin (avec les paramètres supplémentaires - dans ce cas, l'un correspondant à foo) plutôt qu'un simple IASyncResult. Vous n'avez plus besoin de donner absRequest comme "contexte" pour le IAsyncResult, car vous le capturez dans l'expression lambda. Cependant, si vous n'êtes pas familier avec les expressions lambda, vous devriez prendre le temps de vous en occuper, pas seulement pour cela, mais aussi pour LINQ et toutes sortes d'autres objectifs.

+0

merci beaucoup cette solution a fonctionné et je vais certainement lire à ce sujet. – gforg

+0

Comment puis-je réaliser la fonctionnalité dans C# .NET seul sans ASP.NET (comme httpWebRequest ... etc.)? – venkat

+0

@sukumar: HttpWebRequest a déjà BeginGetResponse. Cela ne fait pas partie d'ASP.NET. –

Questions connexes