1

私はWindowsPhone8でアプリケーションを作成し、それを単純なクラスにコーディングすることで簡単に拡張または変更できるようにしようとしています。HTTP POSTを実行してユーザーをサービスにログインさせるWebクライアントを使用して、単純なWeb呼び出しを実行したいと思います。これが私がこれまでに持っている流れです:

  • ユーザーがユーザー名とAPIの詳細を入力するか、以前に保存された詳細から呼び出されます。
  • WebClientはWebサービスへのPOSTを実行し、ユーザー情報などを含むXML応答を受信します。
  • 設定後、コールバックが実行されますWebClient.UploadStringCompleted += new UploadStringCompletedEventHandler(name)
  • ユーザー情報が処理され、処理が行われます。

さまざまな理由で、主にクラスにコードを記述し、最終的に他の開発者向けに無料のSDKとしてコードをリリースしたいという理由で、フローが次のようになることを望みます。

  • ユーザーは詳細を入力するか、保存された詳細から呼び出されます。
  • クラス内の関数は、Webサービスからのエラーを簡単に処理できるように、値またはさらに適切な整数値if(class.Authenticate(user,apikey)){logged in stuff};を返す類似のものと呼ばれます。boolean

私が試したことは何もこれを機能させません、そして私はそれを非同期で機能させる方法について頭を悩ませることができず、ウェブクライアントが自分のスレッドで実行しているように見え、コールバックが行われるまで私のためにそれを保持しませんでした完了しました。

どこかでカスタムWebクライアントクラスを見つけましたが、それは私のニーズには十分ではないGETリクエストしか実行しませんでした。

4

1 に答える 1

1

あなたはこれをしたくありません。

これを行うには、サーバーが応答するまで実行中のスレッドをブロックする必要があります。-
これは非常に長い時間になる可能性があります。
-UIスレッドの場合、これによりユーザーがUIを操作できなくなります。
-接続がない、または接続が非常に遅い場合はどうなりますか

WebClientこれが、同期して電話をかける方法がない理由です。

実行を同期的に見せるための方法はいくつかありますが、フレームワークの操作方法を学び、特定の方法で作業する必要がある理由と、ときどき接続されるデバイスでそれが適切である理由を理解することで、さらに多くのことが得られます。

Awaitableリクエストを行うことで、このコードを同期的に見せることもできます。詳細については、http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspxを参照してください。

于 2013-01-23T15:13:53.170 に答える