2010-12-01 6 views
0

私の問題は、WCFクライアントからのイベントです。クライアントオブジェクトをいくつかのクラスに渡します。そしてこのクラスで私はイベントを作りました。異なるクラスで同じイベントを作成した場合は、何度も発生します。私はWCFを呼び出すクラスでイベントだけが発生するようにしたい。WCFクライアントマルチイベントの問題

問題をどのように解決できますか?完了後に各イベントを削除しますか?私の英語のための

SRY;)

おかげで....

答えて

1

大変申し訳ありません。

クライアントプロジェクトのサービス参照にWCFを追加しました。 は、私はWebサービスクライアントからインスタンスを作成:

private WServiceClient _client = new WService.WServiceClient(); 

、私はいくつかのクラスにこのオブジェクトを渡し。このクラスでは、私はWCF(asyc呼び出し)からのいくつかのMethodeから完全なイベントを作成します。このように:

問題は、いくつかのメソッドを複数のクラスで使用していることです。複数の完全なイベントを作成しています。完全なイベントが発生すると、すべてのクラスですべてのイベントが発生します。私は、呼び出しが行われたクラスにいたイベントだけが発生することを望みます。

私の説明を理解していただければ幸いです。

更新:

私は完全なイベントにイベントハンドラからイベントを削除すると私の問題を解決します。

1

こんにちは 私は非常によくあなたの質問を理解していないが、私は私がやった方法にお答えしようとするでしょう。 WCFサービスを参照する際、クライアントプロジェクトでプロキシクラスが生成されることがわかっています。このプロキシクラスは、サーバ側にある同じデータメンバのインタフェースを共有しますが、動作は共有しません。たとえば、すべてのプロパティはクライアントからアクセスできますが、イベントやメソッドなどはアクセスできません。多分、あなたが達成しようとしていることを書くことができますし、私たちは助けてくれるでしょうか?

更新


[OK]を、今私は理解してだと思います。それは、あなたがAddNumberメソッドを実行する前に起動してはならない各イベントを削除する解決策です。別の解決策は、呼び出しクラスを追跡することです。たとえば

public static ArrayList eventObjects = new ArrayList(); //Declare a global array list which will be accessible from all classes 

eventObjects.Add(this); //Before calling AddNumber method 
_client.AddNumber += new EventHandler<AddNumberCompletedEventArgs>(_client_AddNumberCompleted); 
void _client_AddNumberCompleted(object sender, AddNumberCompletedEventArgs e) 
{ 
    if(ar.Contains(this)) 
    { 
     //Do what you want to do here. Other classes will receive this event too, but they will not react. 
     eventObjects.Remove(this); 
    } 
} 

しかし、これは最善の方法ではないことを私は警告する必要があります。私はあなたが達成しようとしていることが分からないので、より良い方法を提案することはできません。

+0

これは最善の方法ではないと思います。なぜなら、2つのクラスが同じメソッドを同時に呼び出しているからです。私は誰かがより良い解決策を見つけることを願って.. :) – Werewolve