я следующий код:Делегаты и переменные сферы применения
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);
}
Где ExecuteOnActiveClients толкает делегат в очереди, потребляемую асинхронно, и имеет следующую подпись:
void ExecuteOnActiveClients(ClientDelegate action, Boolean parallel, Boolean wait, Boolean lockClient)
У меня есть много функции, которые выглядят так, и которые могут быть вызваны одновременно.
Я заметил, что я должен хранить значение имени (который является частным полем класса) в переменной в функции, прежде чем я выполнить ExecuteOnActiveClients, чтобы этот код работает хорошо, потому что если я не , делегат использует последнее значение имя, а не значение, которое было у поля при вызове функции.
Я думаю, что это проблема сферы, потому что параметры функции (pos, время, линейность и относительная) правильны.
Есть ли способ, чтобы заставить делегат использовать значение имени, когда она была создана, а не значение имени, когда она выполняется?
Я хотел бы избежать, чтобы сохранить значение в каждой из функций, которые используют ExecuteOnActiveClients если возможно.
Заранее спасибо
Майк
Я смущен, вы говорите, что ExecuteOnActiveClients вызывается с ** последним ** значением имени, а не значением во время вызова, тогда вы говорите о желании значения имени во время объявления не текущего стоимость. Можете ли вы перечитать, переформулировать свой вопрос, чтобы устранить двусмысленность, ура. – Lazarus