tengo el siguiente código:datos que pasan en un método de devolución de llamada (a través de BeginInvoke) en C#
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());
}
me pareció que el res.AsyncState devolvería la cadena, aprobada como último argumento en la llamada a BeginInvoke, pero es nulo. ¿Alguien sabe por qué?
PD, sé que podría pasar el del como último argumento en BeginInvoke y luego llamar a EndInvoke en la devolución de llamada, para obtener algún resultado del método doStuff, - ¡o podría obtener el valor val de la clase! - pero me sorprende que el AsyncState en el objeto AsyncResult sea nulo ...
Llama siempre a EndInvoke en un IAsyncResult; de lo contrario, podrías estar perdiendo recursos no administrados (eventos). –