2010-12-16 17 views
0

は、私がここに最小限の労力でWebサービスへの効率的な非同期呼び出しを行う上で大きなページを発見:完了したら、非同期コールバック関数はイベントをスローしますか?

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(オブジェクト送信者、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

ありがとうミック、上の編集された質問を参照してください:) – Freakishly

+0

心配しないで、あなたのurl/uiアップデートロジックをプラグインできるサンプルプロジェクトを追加しました。 Rx(Reactive Extensiosn)の例を取り上げたようですが、今は最初の要件の一部ですか? –

+0

私がRxに行った理由は、HttpWebRequest(UIスレッドをブロックしない)と同じことを実現するからです。私はあなたのコードを見て、それは非常に簡単だと思われる。私のプロジェクトは* Rxを必要としませんが、動作するので変更したくありません:P問題は、私はまだ動作するコールバック関数を取得できません。私は無効なDownloadStringCompleted(オブジェクトの送信者、DownloadStringCompletedEventArgs電子)とそのすべての亜種を、しかしまだ運が試みました:( – Freakishly

1

あなたは、あなたのダウンロードの結果と呼ばれるDownloadCompleted方法、内のコードです置くことができます。すべてのコードがメインスレッドで実行されることに注意してください。処理が重い場合、私はお勧めしますHTTPWebRequest

+0

Hiya Thomas、私はこのコンテキストでの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

関連する問題