Hello all,
I have the following code:
public void SetMove(Position3D pos, float time, float linearity, bool relative)
{
ExecuteOnActiveClients(delegate(NeuroClient client)
{
client.Engine.GetProcAnimation(name).SetMove(pos, time, linearity, relative);
}, true, true);
}
Where ExecuteOnActiveClients pushes the delegate in a queue, consumed asynchronously, and has the following signature:
void ExecuteOnActiveClients(ClientDelegate action, Boolean parallel, Boolean wait, Boolean lockClient)
I have a lot of functions which look like this one, and which may be called concurrently.
I have noticed that I must store the value of name (which is a private field of the class) in a variable in the function before I execute ExecuteOnActiveClients to have this code work well, because if I don't, the delegate uses the last value of name, and not the value the field had when the function was called.
I guess this is a problem of scope, because the parameters of the function (pos, time, linearity and relative) are correct.
Is there a way to force the delegate to use the value of name when it was created, and not the value of name when it is executed?
I'd like to avoid to store the value in each of the lot of functions which use ExecuteOnActiveClients if it possible.
Thanks in advance
Mike