2010-12-01 3 views
0

Mein Problem sind die Ereignisse aus dem WCF-Client. Ich übergebe das Client-Objekt an einige Klassen. Und in diesen Klassen habe ich die Events kreiert. Wenn ich in verschiedenen Klassen dasselbe Ereignis erstelle, wird es mehrmals ausgelöst. Ich möchte, dass nur das Ereignis in der Klasse ausgelöst wird, wo ich die WCF anrufe.WCF-Client Multi Event Problem

Wie kann ich das Problem lösen? Nur jedes Ereignis nach Abschluss entfernen?

Sry für mein Englisch;)

Danke ....

Antwort

1

okay Entschuldigung.

Ich habe die WCF zu den Service-Referenzen im Client-Projekt hinzugefügt. Dann habe ich ein Beispiel aus dem Webservice-Client:

private WServiceClient _client = new WService.WServiceClient(); 

I Hand dieses Objekt mehrere Klassen. In diesen Klassen erstelle ich die kompletten Ereignisse einiger Methoden aus der WCF (asyc calls). So ist das:

Das Problem ist, dass ich einige Methoden mehrere in verschiedenen Klassen verwenden, ich erstelle mehr als ein komplettes Ereignis. Wenn das vollständige Ereignis ausgelöst wird, werden alle Ereignisse in allen Klassen ausgelöst. Ich möchte, dass nur das Ereignis auslöst, wer in der Klasse war, in der der Anruf getätigt wurde.

Ich hoffe, Sie verstehen meine Beschreibung.

Update:

ich mein Problem lösen mit der Veranstaltung von den Eventhandler im vollständigen Ereignisse entfernen.

1

Hallo ich nicht ganz gut verstehe Ihre Frage, aber ich werde versuchen, die Art und Weise habe ich zu beantworten. Wenn Sie einen WCF-Dienst referenzieren, wie Sie wissen, werden Proxy-Klassen im Client-Projekt generiert. Diese Proxy-Klassen teilen sich die Schnittstelle des gleichen Datenelements, die auf der Serverseite liegt, aber nicht das Verhalten. So sind beispielsweise alle Eigenschaften vom Client aus zugänglich, nicht aber Ereignisse, Methoden und so weiter. Vielleicht können Sie schreiben, was Sie erreichen wollen, und wir können Ihnen helfen?

aktualisieren


Ok, jetzt denke ich, ich verstehe. Nun, das ist eine Lösung, um jedes Ereignis zu entfernen, das nicht ausgelöst werden sollte, bevor Sie die AddNumber-Methode ausführen. Eine andere Lösung besteht darin, Anrufklassen zu verfolgen. zum Beispiel

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); 
    } 
} 

Allerdings muss ich Sie warnen, dass dies nicht der beste Ansatz ist. Ich kann dir keinen besseren Weg vorschlagen, weil ich nicht weiß, was du erreichen willst.

+0

Ich denke, das ist nicht der beste Weg, denn wenn 2 Klasse die gleiche Methode zur gleichen Zeit aufrufen. Ich hoffe jemand findet eine bessere Lösung .. :) – Werewolve

Verwandte Themen