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参数 - 但您可以传递一个同时包含它和布尔值的对象。

例如(使用 .NET 4 的元组 - 如果您在 .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 回答