2009-05-22 7 views
3

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

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

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

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

если 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.

+0

Приветствия для этого помощника, это именно то, что я был после – Marklar

Смежные вопросы