2009-05-07 5 views
0

이런 종류의 문제에 대해 몇 가지 논쟁이 있음을 알고 있습니다. 어쨌든 WCF 서비스에서 반환 된 열거 형을 기반으로 ComboBox 항목을 채워야하는 몇 가지 사례가 있습니다.실버 라이트 비동기 호출과 익명 메소드

코드를 깨끗하게 유지하기 위해이 접근 방식을 시작했습니다. 더 자세히 살펴본 결과, 처음에는이 코드가 잘 작동하지 않는다고 생각합니다.

나는이 방법이나 현재 수행중인 작업에 대한 권장 사항/조언/코드 스 니펫을 얻기 위해이 코드를 던지고 있습니다. 이.

나는 익명의 방법이 아닌 별도의 절차가 있어야 할 수도 있습니다. 나는 ... 또 다른 방법으로 작업이 표시되지 않습니다, 이런하지만 순간에 뭔가를이 일을 싫어 우리는 그래서 우리는 다음에서 EV를 사용할 수있는 익명 메소드를 개최 EV를 사용하여이 예에서는 기본적으로

EventHandler<GetEnumerationsForTypeCompletedEventArgs> ev = delegate(object eventSender, GetEnumerationsForTypeCompletedEventArgs eventArgs) 
{ 
    if (eventArgs.Error == null) 
    { 
     //comboBox.ItemsSource = eventArgs.Result; 
     //populate combox for display purposes (for now) 
     foreach (Enumeration e in eventArgs.Result) 
     { 
      ComboBoxItem cbi = new ComboBoxItem(); 
      cbi.Content = e.EnumerationValueDisplayed; 
      comboBox.Items.Add(cbi); 
     } 
     // remove event so we don't keep adding new events each time we need an enumeration 
     proxy.GetEnumerationsForTypeCompleted -= ev; 
    } 
}; 
proxy.GetEnumerationsForTypeCompleted += ev; 
proxy.GetEnumerationsForTypeAsync(sEnumerationType); 

호출 된 이벤트에서 이벤트를 제거하는 메소드. 이렇게하면이 메서드가 두 번 이상 호출되지 않습니다.

이 호출 이전에 선언 된 ComboBox 로컬 변수가 동일한 메서드 내에서 항상 ComboBox가 아니지만 실제로는 확인할 수 없다고 생각됩니다. 일부 테스트를 수행하고 확인을 위해 태그를 추가 할 수 있습니다.

죄송합니다. 명확하지 않으면 죄송합니다. 필요한 경우 더 자세히 설명 할 수 있습니다.

감사합니다.

+0

문제는 무엇입니까? 항목이 ComboBox에 추가되지 않았습니까? – Andy

+0

자세히 설명해주십시오. 어떤 문제가 발생했는지는 명확하지 않습니다. 전체 메소드를 포함하도록 코드 샘플을 확장하면 comboBox 변수가 선언되고 할당되는 위치를 확인할 수 있습니다. –

+0

KISS. 그것을 간단하게 어리 석다. 데이터로 콤보 상자를 채우는 익명 메서드를 사용할 필요가 없습니다. 비동기 호출에 대한 간단한 위임과 각 루프에 대한 위임으로 충분합니다. 추가 보너스로 다음 프로그래머에게도 분명합니다. – mattmanser

답변

1

내가 그렇게처럼 할 온 방법 :

var query = from t in GetFreshContext().Employee select t; 
var dsQuery = (DataServiceQuery<Employee>)query; 
dsQuery.BeginExecute(result => 
{ 
    ComboEmployees.ItemsSource = dsQuery.EndExecute(result).ToArray(); 
}, null); 
ComboEmployees.DisplayMemberPath = "FullName"; 

은 내가 blog post regarding some other problems and this을 썼다.