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
    }
}