У меня есть следующий код:
delegate int doStuffDel(int instanceNo, int sleepTime, int repeatCount);
string result;
private int doStuff(int instanceNo, int sleepTime, int repeatCount)
{
for (int i = 0; i < repeatCount; i++)
{
Console.Write(instanceNo);
Thread.Sleep(sleepTime);
}
result = instanceNo + " repeated " + repeatCount;
return instanceNo;
}
private void button3_Click(object sender, EventArgs e)
{
doStuffDel del = doStuff;
IAsyncResult ar = del.BeginInvoke(3, 120, 50, finishedCallback, result);
}
private void finishedCallback(IAsyncResult ar)
{
Console.WriteLine("Done. The result was " + ar.AsyncState.ToString());
}
Я думал, что res.AsyncState вернет строку, переданную в качестве последнего аргумента в вызове BeginInvoke, но она равна нулю. Кто-нибудь знает почему?
PS, я знаю, что мог бы передать del в качестве последнего аргумента в BeginInvoke, а затем вызвать EndInvoke в обратном вызове, чтобы получить некоторый результат от метода doStuff, - или я мог бы просто получить строку val из класса! - но я удивлен, что AsyncState на объекте AsyncResult имеет значение null ...