我有以下方法调用webservice。 DownloadStringCompletedEventHandler'回调'显然是在此函数完成后函数控件将流向的:
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(控件将在webservice调用之后结束)然后如下所示:
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'并以那种方式检索它将非常方便。
非常感谢任何人的帮助!! :(
答案 0 :(得分:6)
使用此DownloadStringAsync的重载。它需要一个额外的object类型参数,它可以通过DownloadStringCompletedEventArgs的UserState属性在已完成的处理程序中使用。 这允许您传入您想要的任何状态信息。
e.g。致电服务:
client.DownloadStringAsync(new Uri(servletUrl, UriKind.Absolute), yourParameter);
访问结果:
string yourParameter = e.UserState as string;
答案 1 :(得分:1)
在回调方法中,您引用了sender对象。在myWebservice中,在客户端对象中添加标题 -
client.Headers["yourParameter"]= yourParameter;
在你的回调中,您可以像这样检索标题
var client= sender as WebClient;
string parameter= client.Headers["yourParameter"];
编辑:这显然不是识别异步请求的正确方法。 sga101的方法更合适。