C#如何将不仅仅是IAsyncResult传递给AsyncCallback?

PiZ*_*zL3 5 c# asynchronous httpwebrequest iasyncresult asynccallback

如何将IAsyncResult传递给AsyncCallback?

示例代码:

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

//Method
private void iEndGetResponse(IAsyncResult iA, bool iWantInToo) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

我想传递示例变量bool iWantInToo.我不知道如何添加它new AsyncCallback(iEndGetResponse).

Ree*_*sey 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..
}
Run Code Online (Sandbox Code Playgroud)