3

我有以下调用网络服务的方法。DownloadStringCompletedEventHandler 'callback' 显然是该函数完成后将流向的函数控制:

private void myWebService(string yourParameter, DownloadStringCompletedEventHandler callback)
{
    //Url to search servlet
    string servletUrl = string.Format("https://something.com/etc/what?bla={0}",
        Uri.EscapeDataString(yourParameter));

    //Calls Servlet
    WebClient client = new WebClient();
    client.DownloadStringCompleted += callback;
    client.DownloadStringAsync(new Uri(servletUrl, UriKind.Absolute));
}

我这样调用上面的函数:

myWebService("Hello there!", myWebServiceReturn);

WebServiceReturn(控制将在 web 服务调用之后结束)看起来像这样:

private void myWebServiceReturn(object sender, DownloadStringCompletedEventArgs e)
{
    //And here we end up...
    //how do I get the value of 'yourParameter' that I sent to 'myWebService()'??
}

所以我的问题是.. 我发送到“myWebService()”的参数,在本例中是“yourParameter”,如何在“myWebServiceReturn”方法中获得相同的值?如果我能以某种方式将其附加到“DownloadStringCompletedEventArgs e”并以这种方式检索它,那将非常方便。

真的很感谢任何人的帮助!:(

4

2 回答 2

6

使用此重载的DownloadStringAsync。它需要一个额外的对象类型参数,该参数可通过 DownloadStringCompletedEventArgs 的 UserState 属性在完成的处理程序中使用。这允许您传递您想要的任何状态信息。

例如调用服务:

client.DownloadStringAsync(new Uri(servletUrl, UriKind.Absolute), yourParameter);

访问结果:

string yourParameter = e.UserState as string;
于 2012-11-14T12:51:34.630 回答
1

在回调方法中,您引用了发送者对象。在您的 myWebservice 中,在客户端对象中添加一个标头 -

client.Headers["yourParameter"]= yourParameter;

在你的回调中,你可以像这样检索标题

var client= sender as WebClient;
string parameter= client.Headers["yourParameter"];

编辑:这显然不是识别异步请求的正确方法。sga101的方法比较合适。

于 2012-11-14T12:52:28.077 回答