DownloadStringCompletedEventHandler参数

3 c# parameters events windows-phone-7 windows-phone-7.1

我有以下方法调用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));
}
Run Code Online (Sandbox Code Playgroud)

我这样调用上面的函数:

myWebService("Hello there!", myWebServiceReturn);
Run Code Online (Sandbox Code Playgroud)

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()'??
}
Run Code Online (Sandbox Code Playgroud)

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

非常感谢任何人的帮助!! :(

sga*_*101 6

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

例如,致电服务:

client.DownloadStringAsync(new Uri(servletUrl, UriKind.Absolute), yourParameter);
Run Code Online (Sandbox Code Playgroud)

访问结果:

string yourParameter = e.UserState as string;
Run Code Online (Sandbox Code Playgroud)