2012-01-19 2 views
0

서버에서 파일을 다운로드하고 목록에 배치하는 중입니다.다운로드 한 콘텐츠와 목록의 색인이 일치하는지 어떻게 확인합니까?

원본 URL의 출처가 올바른 색인에 파일을 어떻게 설정합니까?

예를 들어, 내가 가진

List<myCustomObject> downloadedContentContainers {get;set;} 
    myCustomObject contains a property downloadURL 
    myCustomOBject also contains a property called downloadedByteArray 

downloadContentContainers의 각 항목은 downloadedContent를 얻을 수있는 URL, 다운로드 및 조작 프로세스가 완료되면, 나는 myCustomObject의 속성에 배치되는 결과를 원하는 보유 downloadContentContainers의 올바른 색인에 있습니다. 한마디로

, 나는 myCustomObject.downloadUrl의 결과가

내가 이걸 어떻게해야합니까 myCustomObject.downloadedByteArray에 삽입하고 싶어?

내 주된 장애물은 람다 및 스코프 출력입니다. 목록에는 foreach를 사용하고 색인은없고 파일 크기가 크고 비동기 성이 있습니다.

+1

질문에 대한 답변을 드릴 수있는 세부 정보를 제공하지 않았습니다. 정확한 입력은 무엇이고 원하는 결과는 무엇입니까? – ColinE

+0

@ColinE 죄송합니다. 코드 블록에 문제가있는 것 같고, 더 많은 정보를 추가했습니다. – Bob

+1

다운로드하는 async 메서드에서 특정 항목의 인덱스 정보에 액세스 할 수 없다는 것이 문제인 것 같습니다. 다운로드 로직을 myCustomObject 클래스에 넣어야합니다. 다운로드 한 로직을 거기에서 설정할 수 있습니다. – mostruash

답변

1

일반적인 C# 패턴인지는 모르지만 비동기 메서드를 사용하고 개체의 일부 속성을 변경해야하는 경우 가장 쉬운 방법은 해당 메서드를 해당 특정 클래스에 넣는 것입니다 . 당신이 (하지 않으려는)/할 수 없다면, 어떻게 든 그 객체에 대한 참조를 찾고, 때로는 그것을 이벤트 args에 넣거나 이벤트 발신자를 통해 접근 할 수있는 방법이 필요하다. 목적. 따라서 다운로드 로직을 myCustomObject 클래스에 넣어야합니다. 따라서 다운로드 된 로직을 다운로드 할 수 있습니다.

+0

감사합니다. 이 인수들을 비동기 이벤트에 전달하는 방법을 알기에 C#을 충분히 알고 있습니까? 그것은 나에게 스파게티의 흔적을 느낀다. 그리고 내가 시험했을 때 나는 람다와 범위 문제를 쳤다. 그렇게한다면이 대답을 받아 들일 수 있습니다. – Bob

+1

다운로드 논리와 함께 사용하는 EventHandler 및 EventArgs의 유형에 따라 다릅니다. 나는. WebClient의 OpenReadAsync 메서드를 사용하는 경우 OpenReadAsync (uri, obj)라는 객체를 전달할 수 있습니다. 이벤트 핸들러에서 e.UserState를 사용하여 이벤트 핸들러에 액세스 할 수 있습니다. – mostruash

관련 문제