2011-11-07 2 views
0

문자열을 다운로드하고 구문 분석 한 다음 구문 분석 된 데이터를 문자열 []로 반환하는 메서드가 있습니다. 이제는 DownloadStringAsync를 사용하도록 해당 메서드를 변경하려고하지만 여전히 문자열 배열을 반환하는 함수로 사용하는 방법을 모르겠습니다. 인출 된 문자열이 DownloadStringAsyncCompleted 방법으로 분석하고 방법이 호출 된하지 때문에WebClient.DownloadStringAsync 함수에 문자열을 반환합니다.

: S

+2

비동기 작업을 사용하려고하지만 여전히 차단하려는 것처럼 들리겠습니까? –

+0

@QuintinRobinson 네 말이 맞아. 내가 원하는 방식대로 작동하지 않을 것이다. 다시 생각해야한다. – fgblomqvist

답변

2

당신은 완벽하게 비동기 하나에 동기 코드를 변환 할 수 없습니다. 귀하의 예제에서 void를 반환하고 데이터가 왔음을 알리기 위해 DownloadStringAsyncCompleted에서 호출해야하는 Action (콜백) 유형의 다른 매개 변수를 받아 들여야합니다.

C# 5는 약간 도움이되지만 여전히 비동기입니다.

+0

아마도 이것이 어떻게해야할까요? 대신 DownloadString을 포함한 전체 메서드를 backgroundWorker에 넣을 것입니다. 그러나 이것은이 질문에 대한 정답입니다. – fgblomqvist

0

시도 WebClient.DownloadString 비동기가 아닙니다.

WebClient client = new WebClient(); 
string reply = client.DownloadString (address); 
Console.WriteLine (reply); 

DownloadStringAsync 메서드를 사용하려면 DownloadStringAsyncCompleted 이벤트가 발생할 때까지 기다려야합니다. 다시 그것은 동기화 방법이 될 것입니다. 결과를 계속 원한다면 sync 메소드를 사용하십시오.

0

DownloadStringAsync()을 통해 비동기 다운로드 시작을 트리거하도록 메소드를 변경해야합니다. 그런 다음 구문을 분석하는 코드를 이동하여 string[]DownloadStringAsyncCompleted 이벤트를 처리하는 메서드로 반환합니다.

관련 문제