3

Webサービスを呼び出す次のメソッドがあります。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 (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

コールバック メソッドでは、sender オブジェクトへの参照があります。myWebservice で、クライアント オブジェクトにヘッダーを追加します。

client.Headers["yourParameter"]= yourParameter;

コールバック内で、次のようにヘッダーを取得できます

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

編集:これは明らかに、非同期リクエストを識別する正しい方法ではありません。sga101 の方法の方が適切です。

于 2012-11-14T12:52:28.077 に答える