バックグラウンドWebリクエストを作成してUIを更新するにはどうすればよいですか?Webをリクエスト/解析するコードはすべて別のクラスで行いますので、 ?私はAPIHelperの方法を持っているWindows Phone 7でスレッドとWebリクエストを処理する
APIHelper mHelper = new APIHelper("http://example.com?foo=bar");
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork +=new DoWorkEventHandler(mHelper.GetResponse);
bw.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(mHelper.HandleResponse);
bw.RunWorkerAsync();
のように、BackgroundWorkerのクラスのイベントハンドラなどのクラスのメソッドを使用すると考えていた
public void GetResponse(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = (BackgroundWorker) sender;
WebRequest request = HttpWebRequest.Create(this.URL);
IAsyncResult result = (IAsyncResult)
request.BeginGetResponse(ResponseCallback, request);
}
が、その後、私はからワーカースレッドにアクセスする方法がわかりませんResponseCallback、とにかく、HandleResponseが最初に呼び出されます(明らかに)。 (私はresult.AsyncWaitHandle.WaitOne();
を入れてみましたが、NotSupportedException
エラーが発生します)。しかし、Webリクエストを同期的に呼び出す方法を考えることはできません。私は明らかにこれを間違った方向に進めようとしていますが、正しい方法が何であるか分かりません。
ETA:
私の目的は行くことができるようにすることです:
ユーザーがクリックする(さまざまなページ上)(a)のボタン(S)
UIスレッドに「作業中」のメッセージが表示された後(入力がブロックされている)
バックグラウンドスレッドでAPIHelperクラスがAPI呼び出しを行い、応答を取得してUIスレッドに返します。
UIスレッドの更新を要求し、別のスレッドを開始し、それが戻るのを待つことによってこれを行うことができるように見える(と入力は以前のように続けます)
私は最初の2ビットを行うことができます。応答がある場合、最後のビットを実行できますが、中位ビットを実行する方法を考えることはできません。うまくいけば、それはそれをより明確にしました!
なぜコールバックでBackgroundWorkerにアクセスする必要がありますか? –
私は応答を返すことができます。 –