2

場合によっては、Silverlight で WCF サービスを呼び出して、返されるまで UI をブロックする必要があります。確かに私は3つのステップでそれを行うことができます:

  1. ハンドラーとブロック UI のセットアップ
  2. 通話サービス
  3. すべてが完了したら、UI のブロックを解除します。

ただし、DoSomethingSync メソッドをサービス クライアント クラスに追加し、必要なときに呼び出すだけにしたいと考えています。

出来ますか?誰かが本当にそのような方法を実装しましたか?

更新: 答えは同期呼び出しをまったく使用しないことのようです。非同期呼び出しの使いやすいパターンを探します。詳細については、この投稿 (コメントから取得) をご覧ください。

4

4 に答える 4

9

ここが要点です。Silverlight で同期 IO を行うべきではありません。戦うのはやめて!その代わり:

  • UI の重要な部分を無効にする
  • コールバックで非同期 IO を開始する
  • (...)
  • コールバックで、データを処理し、UI を更新/再有効化します

たまたま、非同期パターンをより親しみやすいものにする方法に積極的に取り組んでいます (特に Silverlight を念頭に置いて)。これが最初の刺し傷ですが、私にはもっと良いものがあります;-p

于 2009-03-15T08:47:34.743 に答える
2

同期Webサービス呼び出しを行う必要がある本物のケースがあるというMarcには同意しません。ただし、おそらく避けるべきことは、UIスレッドをブロックすることです。これは、非常に悪いユーザーエクスペリエンスを生み出すためです。

サービス呼び出しを同期的に実装する非常に簡単な方法は、ManualResetEventを使用することです。

ManualResetEvent m_svcMRE = new ManualResetEvent(false);
MyServiceClient m_svcProxy = new MyServiceClient(binding, address);
m_svcProxy.DoSomethingCompleted += (sender, args) => {  m_svcMRE.Set(); };

public void DoSomething()
{
    m_svcMRE.Reset();
    m_svcProxy.DoSomething();
    m_svcMRE.WaitOne();
}
于 2009-03-15T09:21:30.700 に答える
2

SLでWCFサービスを同期的に呼び出すことができるクラスは次のとおりです。http: //johnleitch.blogspot.com/2010/03/easy-way-to-synchronously-call-wcf.html

于 2010-03-18T15:11:33.303 に答える
-1

ビジネス アプリケーション自体を構築する SL4 を使用するのは、間違ったアプローチです。SL4 クライアントで非同期呼び出しの問題に直面しています。この問題だけではありません。SL アプリケーションにログインしてから 15 分間ビークすると、休憩後に SL アプリケーションはすべてのデータをまったく保持できなくなります。それは時々非常に頻繁に起こります。

于 2011-02-03T08:44:49.173 に答える