2009-05-22 2 views
3

안녕하세요, 내가 만든 사용자 지정 단추 목록을 반복하려고합니다. 그것은 DB에서 일부 정보를 얻기 위해 WCF 서비스를 호출합니다. 내가 client.GetLevelDescriptionAsync (l.Name)에서 반환 무엇이든 취할 걸려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);      
} 

; 예를 들어 l.Text = 결과;

내 문제는 단추에 대한 참조를 EventHandler의 추가 매개 변수로 전달하는 것입니다. 내가하고 싶은 것을 성취하는 올바른 방법은 무엇입니까?

감사

답변

1

당신이 고려할 수 두 가지 방법이 있습니다

  • 자신의 대리자 형식/이벤트 인수는
  • 가 노출하는 모금 클래스의 공용 속성을 가지고있는 여분의 데이터를 입력 선언은 이 데이터

GetLevelDescriptionCompletedEventArgs이 유형 인 경우 이미 첫 번째 작업을 수행 중입니다. 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