2010-11-26 25 views
1

私は非同期で複数のWcfサービスを呼び出す必要があります。私はそれらを変更することは非常に遅く、一度にすべてを呼び出してBOに完全なデータを取得する必要があります。WCFサービスへの複数の非同期呼び出しのスレッディング

以下のコードでは、同じメソッドを呼び出していますが、同じメソッドを呼び出すスレッドには問題がありますが、メソッドを呼び出すのは25だけです。

先ほどの例では、セープを示しました

私は、メソッドをロックする方法を教えてください。一度に1つのスレッドしか使用できないので、私のクラスでBackgroundWorkerProcessを使用することも有効ですMVC 2アプリケーション?

namespace WCFThreadingTest 

{パブリック部分クラスをForm1:フォーム {パブリックstatic int型の結果= 0;

public Form1() 
    { 
     InitializeComponent(); 
     Completed += (s, a) => 
     { 
      // all complete, return to client. 
      MessageBox.Show(result.ToString()); 
      auto.Close(); 
      wrk.Dispose(); 
     }; 

     wrk.DoWork += (s, a) => 
     { 
      Start(); 
     }; 

     wrk.RunWorkerAsync(); 
    } 

    public event EventHandler Completed; 
    public AutoResetEvent auto = new AutoResetEvent(false); 

    private void Start() 
    { 
     auto.WaitOne(); 
     Completed(this, EventArgs.Empty); 
    } 

    BackgroundWorker wrk = new BackgroundWorker(); 

    private void button1_Click(object sender, EventArgs e) 
    { 
     ServiceReference1.Service1Client clien = new ServiceReference1.Service1Client(); 

     for (int i = 0; i < 5; i++) 
     { 
      clien.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(clien_GetDataCompleted); 
      clien.GetDataAsync(i); 
     } 
    } 

    public void clien_GetDataCompleted(object sender, GetDataCompletedEventArgs e) 
    { 
      result += e.Result; 
      auto.Set(); 
    } 

} 

} GetDataCompletedイベント、呼び出しごとに1、そうイベントが解雇されるたびに、あなたのハンドラが呼び出さなっている5倍(5×5に

答えて

0

あなたは、複数の加入している(5)倍= 25)。次の行を移動してください:

clien.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(clien_GetDataCompleted); 

ループ外です。

+0

こんにちは、ありがとうございます、余分な呼び出しを修正しましたが、私は今clien_GetDataCompletedの結果が増えていますが、Completedが最終結果変数を呼び出すと、最後の値を保持します。 –

+0

何が結果ですか?どのように使用されていますか?その問題はWCFに関係することはまずありません。 – tomasr

+0

こんにちはTomar、その大丈夫、私は代わりに.net 4からタスクモデルを使用し始めて、あなたの助けをありがとう。 –

関連する問題