2010-12-16 4 views
0

는 여기 최소의 노력으로 웹 서비스를 효율적으로 비동기 호출을 만들기에 좋은 페이지를 발견 :비동기 콜백 함수가 완료되면 이벤트를 throw합니까?

http://www.jaylee.org/post/2010/06/22/WP7Dev-Using-the-WebClient-with-Reactive-Extensions-for-Effective-Asynchronous-Downloads.aspx

내가 내가 실행 원하는 코드를 삽입 할 경우 응답이 후에 대한 혼란 스러워요 서버로부터 수신합니까? 이 경우 시스템에서 이벤트를 발생합니까? asyncdownload를 호출 한 후에 코드를 삽입하는 것만으로이 기능을 제공 할 수 없습니다.


나는 분명해야했습니다. 내 프로젝트에이 코드가 있습니다.

private void SearchBarcode(object sender, EventArgs e) 
    { 
     WebClient wc = new WebClient(); 

     var o = Observable.FromEvent<DownloadStringCompletedEventArgs>(wc, "DownloadStringCompleted") 

          // Let's make sure that we’re on the thread pool 
          .ObserveOn(Scheduler.ThreadPool) 

          // When the event fires, just select the string and make 
          // an IObservable<string> instead 
          .Select(newString => ProcessString(newString.EventArgs.Result)) 

          // Now go back to the UI Thread 
          .ObserveOn(Scheduler.Dispatcher) 

          // Subscribe to the observable, and set the label text 
          .Subscribe(s => parserInput = s); 

     wc.DownloadStringAsync(new Uri("http://api.search.live.net/xml.aspx?Appid=appidhere&query=barcodenumber&sources=web")); 
    } 

DownloadCompleted 이벤트 호출을 배치 할 수있는 위치가 표시되지 않습니다. SearchBarcode는 이미지의 onclick 핸들러입니다. SearchBarcode가 실행 된 후 컨트롤은 어디로 이동합니까? parserInput의 값을 조작하고 이러한 값을 전달하는 다른 xaml 페이지를 호출하려고합니다. voidCompleted (object sender, DownloadStringCompletedEventArgs e)를 추가하려고 시도했지만 분명히 호출되지 않습니다. 내가 여기서 무엇을 놓치고 있니? :(

+1

정확히 원하는 것을 더 자세히 설명해 주시겠습니까? "DownloadCompleted"이벤트 처리기에 넣은 코드는 다운로드가 완료된 후에 실행됩니다. 그래서 당신이 원하는 것 이상으로? 또는 그 문제는 무엇입니까? –

+2

참조를 위해 이벤트가 발생합니다. 오류가 발생합니다. –

+0

얘들 아, 좀 더 구체적인 질문을 편집했다. 찾아 주셔서 감사합니다 : D – Freakishly

답변

1

당신은 콜백의 끝에서이 논리를 넣을 수 있습니다.

를 사용하면 링크 된 샘플에서 그 그가 DownloadCompleted의 디스패처와 함께 무엇을하고 있는지입니다.

를이 내가 사용을 보여 쓴 예제 프로젝트입니다 HttpWebRequest를을의. ResponseCallback의 끝에서 당신은 UI를 업데이트 ... ...

Dispatcher.BeginInvoke(() => { httpWebRequestTextBlock.Text = contents; }); 

을 볼 수 있습니다.

를 무료로 느껴 이 코드를 작성하고 URL을 사용하십시오.

WebClient, HttpWebRequest and the UI Thread on Windows Phone 7

+0

Thanks Mick, 위의 편집 된 질문을 참조하십시오 :) – Freakishly

+0

걱정하지 마세요. url/ui 업데이트 로직을 연결할 수있는 샘플 프로젝트를 추가했습니다. Rx (Reactive Extensiosn) 예제를 얻은 것 같습니다.하지만 이제는 초기 요구 사항 중 일부였습니까? –

+0

Rx를 사용하는 이유는 HttpWebRequest (UI 스레드를 차단하지 않음)와 동일한 작업을 수행하기 때문입니다. 나는 당신의 코드를 살펴 보았고 매우 직설적으로 보인다. 내 프로젝트는 * Rx를 필요로하지 않지만 일을하기 때문에 변경하지 않으려합니다. P 문제는 여전히 콜백 함수가 작동하지 않습니다. 나는 무효 DownloadStringCompleted (개체 보낸 사람, DownloadStringCompletedEventArgs 전자) 및 모든 변종 그러나 여전히 운이 시도했다 : ( – Freakishly

1

당신은 당신의 다운로드의 결과로 호출되는 DownloadCompleted 방법, 코드있어 넣을 수 있습니다. 모든 코드는 주 스레드에서 실행된다는 점에 유의하십시오. 처리해야 할 작업이 많은 경우 HTTPWebRequest

+0

히야 토마스, 나는이 맥락에서 HTTPWebRequest와 그 사용법에 익숙하지 않다. . 링크를 얻을 수 있을까요? – Freakishly

+0

Webclient와 같은 방식으로 작동하지만 콜백에서는 UI 스레드에 액세스하는 코드가 더 필요합니다. doc : http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx 사용 예 : http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/594e1422-3b69-4cd2-a09b-fb500d5eb1d8 –

+0

감사합니다 ... 좋은 깨끗한 예제가있는 좋은 페이지입니다. 나는 DownloadCompleted 메서드를 추가하여 올바른 대답으로 표시하기 전에 작동하도록 시도 할 것입니다. – Freakishly

관련 문제