5

IAsyncResult以上のものをAsyncCallbackに渡すにはどうすればよいですか?

コード例:

//Usage
var req = (HttpWebRequest)iAreq;
req.BeginGetResponse(new AsyncCallback(iEndGetResponse), req);

//Method
private void iEndGetResponse(IAsyncResult iA, bool iWantInToo) { /*...*/ }

例の変数を渡したいと思いますbool iWantInToo。に追加する方法がわかりませんnew AsyncCallback(iEndGetResponse)

4

1 に答える 1

12

オブジェクトの状態を使用して渡す必要があります。現在、reqパラメータを渡していますが、代わりに、オブジェクトとブール値の両方を含むオブジェクトを渡すことができます。

たとえば(.NET4のタプルを使用-.NET<= 3.5の場合は、カスタムクラスまたはKeyValuePairなどを使用できます):

var req = (HttpWebRequest)iAreq;
bool iWantInToo = true;
req.BeginGetResponse(new AsyncCallback(iEndGetResponse), Tuple.Create(req, iWantInToo));

//Method
private void iEndGetResponse(IAsyncResult iA) 
{
    Tuple<HttpWebRequest, bool> state = (Tuple<HttpWebRequest, bool>)iA.AsyncState;
    bool iWantInToo = state.Item2;

    // use values..
}
于 2011-04-11T18:08:52.550 に答える