C# HttpRequest为AsyncCallback委托提供参数
我正在异步使用C# HttpRequest为AsyncCallback委托提供参数,c#,C#,我正在异步使用HttpWebRequest类,如下所示(它是一个Windows应用程序) 但是我想给StartWebRequest方法中的AsyncCallback委托提供一些参数,可以吗?因为我想将图片名称作为参数,如: bitmap.Save(@"z:\MYPARAMATERVALUE.jpg"); 这里最简单的方法是使用匿名函数(匿名方法或lambda表达式),如下所示: private void StartWebRequest(string url, string filename)
HttpWebRequest
类,如下所示(它是一个Windows应用程序)
但是我想给StartWebRequest
方法中的AsyncCallback
委托提供一些参数,可以吗?因为我想将图片名称作为参数,如:
bitmap.Save(@"z:\MYPARAMATERVALUE.jpg");
这里最简单的方法是使用匿名函数(匿名方法或lambda表达式),如下所示:
private void StartWebRequest(string url, string filename)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.BeginGetResponse(result => {
FinishWebRequest(result, request, filename);
}, null); // Don't need the state here any more
}
private void FinishWebRequest(IAsyncResult result,
HttpWebRequest request,
string filename)
{
using (HttpWebResponse response =
(HttpWebResponse) request.EndGetResponse(result))
{
// Use filename here
}
}
当然,您可以手动执行所有这些操作,但是您需要创建一个新类来捕获文件名,创建该类的实例,然后在该类中为回调委托使用一个方法。这正是编译器使用匿名函数为您所做的
private void StartWebRequest(string url, string filename)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.BeginGetResponse(result => {
FinishWebRequest(result, request, filename);
}, null); // Don't need the state here any more
}
private void FinishWebRequest(IAsyncResult result,
HttpWebRequest request,
string filename)
{
using (HttpWebResponse response =
(HttpWebResponse) request.EndGetResponse(result))
{
// Use filename here
}
}