Delegate zugeordnete Funktionen abfragen

28/07/2009 - 09:56 von Thomas S. | Report spam
Hallo CSharp-Gemeinde,
ich bin relativ neu auf dem Gebiet C# und habe ein Problem mit
Delegates. Ich kommuniziere mit Bluetooth und ordne den Franson
Bluetools über einen Delegaten die Funktion zu, die aufgerufen werden
soll, wenn Daten ankommen.

Dabei habe ich verschiedene Parsingroutinen, die sich jeweils die Pakete
aus dem Datenstrom picken, die für sie interessant sind. Je nachdem, wie
der Benutzer sich in meinem Programm bewegt, kann es dabei passieren,
dass ich einen Parser doppelt per += zuordne. Dadurch wird das
Empfangs-Event dann mehrfach ausgeführt.

Im Moment verwende ich den Workaround, dass ich einfach vorher die
Bindung durch -= auflöse (dort ist es angeblich egal, ob die Funktion
zugeordnet war oder nicht) und erst danach per += hinzufüge.

Frage 1:
Schöner fànde ich einen Weg, zunàchst abzufragen, ob die Funktion schon
zugeordnet ist oder nicht. Gibt es so einen Weg? Eine Abfrage mit == mag
mein Compiler (von Visual Studio 2008) nicht.

Außerdem wàre es schön, wenn ich alle Bindungen auflösen könnte, wenn
die Verbindung abgebaut wird. In einem C# Programmierbuch habe ich
gelesen, dass dafür einem Delegaten auch explizit der Wert null
zugewiesen werden kann.

Frage 2:
Bei mir kommt beim Versuch null zuzuweisen die Fehlermeldung

Programmzeile:
BluetoolsConnection.reportDeviceData = null;

Fehlermeldung:
Fehler 10 Das Ereignis
"Connections.BluetoolsConnection.reportDeviceData" kann nur links von +oder -= stehen (es sei denn, es wird innerhalb des Typs
"Connections.BluetoolsConnection" verwendet).

Was bedeutet der Hinweis, dass ich das nur innerhalb von
Connections.BluetoolsConnection machen darf? Wieso?


Ich hoffe ihr könnt mir ein paar Tipps geben,
Gruß Thomas
 

Lesen sie die antworten

#1 Frank Dzaebel
29/07/2009 - 08:31 | Warnen spam
Hallo Thomas,

Im Moment verwende ich den Workaround, dass ich einfach vorher die
Bindung durch -= auflöse (dort ist es angeblich egal, ob die Funktion
zugeordnet war oder nicht) und erst danach per += hinzufüge.



ja, das ist eine Möglichkeit. Für Hintergründe auch:

[CodeProject: Get Delegate from Event's Subscription]
http://www.codeproject.com/KB/cs/De...Event.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen