У меня есть следующий код, который я использую для имитации живой передачи данных, которая одновременно отправляет сообщение, что каждый объект типа «Символ» в коллекции внутри «Портфолио.Symbols» должен реагировать (другим способом, выполняющим над ним некоторые работы).Несколько анонимных обработчиков событий - но только последний называется
Для того, чтобы это было правдой одновременно, я пытаюсь зарегистрировать анонимный обработчики событий следующим образом:
static public void RegisterEvents()
{
foreach (Symbol symbol in Portfolio.Symbols)
{
GenerateQuoteRequest +=() => { SomeMethod(symbol); };
}
}
static public void Run()
{
OnGenerateQuoteRequest();
Thread.Sleep(100);
}
public delegate void OnGenerateQuoteRequestEventHandler();
public static event OnGenerateQuoteRequestEventHandler GenerateQuoteRequest
= delegate {};
...
тогда, когда я пытаюсь поднять событие, в надежде, что я получу ряд «SomeMethod «экземпляры возбуждаются. К сожалению, вызывается только последний добавленный символ.
Что мне здесь не хватает?
только последний «символ» добавлен называется - Да, но это называется много. –
См. Также http://stackoverflow.com/questions/3190578/from-eric-lipperts-blog-dont-close-over-the-loop-variable (и различные ссылки в верхней части и комментарии). Это очень популярный вопрос SO. – Brian