Передача дополнительных параметров в EventHandler - PullRequest
3 голосов
/ 22 мая 2009

Привет! Я пытаюсь перебрать список пользовательских кнопок, которые я создал. Он делает запрос к службе WCF, чтобы получить некоторую информацию из БД.

foreach (LevelButton l in ls)
{
    WayFinderDBService.WayFinderDBServiceClient client = new    SilverlightNav.WayFinderDBService.WayFinderDBServiceClient();
    client.GetLevelDescriptionCompleted += new    EventHandler<SilverlightNav.WayFinderDBService.GetLevelDescriptionCompletedEventArgs>(client_GetLevelDescriptionCompleted);
    client.GetLevelDescriptionAsync(l.Name);                    
}

Я хочу взять все, что возвращается из client.GetLevelDescriptionAsync (l.Name); а затем передать это кнопке, например, l.Text = результат;

Моя проблема заключается в передаче ссылки на кнопку в качестве дополнительного параметра в EventHandler. Как правильно достичь того, чего я хочу?

Спасибо

1 Ответ

1 голос
/ 22 мая 2009

Есть два подхода, которые вы могли бы рассмотреть:

  • объявляет ваш собственный тип делегата / тип аргумента event-args с дополнительными данными
  • имеет публичную собственность на класс повышения, который выставляет эти данные

если GetLevelDescriptionCompletedEventArgs является вашим типом, то вы уже делаете первый - так что просто выставьте это значение в типе event-args; Вы можете использовать его анонимным способом:

foreach (LevelButton l in ls)
{
    LevelButton tmp = l;
    var client=new SilverlightNav.WayFinderDBService.WayFinderDBServiceClient();
    client.GetLevelDescriptionCompleted += delegate (object sender, GetLevelDescriptionCompletedEventArgs args) {
       tmp.Text = args.SomeProperty; // **must** be tmp.Text, not l.Text
    }
    client.GetLevelDescriptionAsync(tmp.Name); // or l.Name; same here
}

Однако есть проблема - обратите внимание на tmp выше; это пресловутая проблема foreach / capture.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...