Event problemstilling. C# og VB

Tags:    .net

Hej til hvem, der nu kan svare på følgende:

Jeg udvikler i både C# og VB og har stødt på et mindre problem. I stedet for at vise al min kode, vil jeg forsøge at beskrive min problemstilling.

Jeg har udviklet en klasse i C#, der indeholder en Delegate metode:
public delegate void MinEventHandler(object sender, System.EventArgs e);

og en tilsvarende Event:
event MinEventHandler MinEvent;

Og desuden en metode til af fyre min event af:
protected virtual void MinEventMetode(object sender, System.EventArgs e)
{
if (MinEvent != null)
{
// Fyr MinEvent af
MinEvent(sender, e);
}
}

Når jeg nu instanciere den klasse til et nyt objekt og så vil håndtere MinEvent, så kan jeg naturligvis benytte mig af følgende fremgangsmåder:

(C#) MinEvent += new MinEventHandler(MetodenDerHandlerEventen);
(VB) AddHandler MinEvent, AddressOf MetodenDerHandlerEventen

Men men men...jeg vil gerne have muligheden for at benytte mig af VB's WithEvents, således:

Private WithEvents _minInstanceAfKlassen As MinKlasse = New MinKlasse()

Private Sub _minInstanceAfKlassen_MinEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles _minInstanceAfKlassen.MinEvent
' Eventen fanges her
End Sub

Og her opstår mit problem. Eventen fyres ikke af?! Jeg har debugget mig igennem koden, og det viser sig at "if (MinEvent != null)" ikke opfyldes, dvs. MinEvent er null. Hvorfor? Burde WithEvents ikke "nede i maven" på systemet gøre det muligt for mig at benytte mig af events fra en C# klasse uden at skulle bruge AddHandler fremgangsmåden?

Under alle omstændigheder, så håber jeg, at nogen kan forstå problemstillingen, og at der findes en løsning på den.

Venlig hilsen

Carsten




2 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Jeg kan fortælle, at jeg har prøvet din kode, og den virker fint for mig.

Har du tråde involveret? (din funktion MinEventMetode er ikke trådsikker)

Du kan evt. vha. ILDASM checke, om dit program genererer den rigtige IL kode. I IL'en burde du have en funktion, der hedder noget i retning af set_MinEvent, hvor din event handler bliver sat op (set_MinEvent vil blive kaldt fra konstruktoren på din VB-klasse (som jeg går ud fra er en form?)

Mvh. Jakob.



Hej,

Er der nogen speciel grund til du vil undgå at benytte den sædvanlige event subscribtion? Du kan evt. lægge en delegate params på din constructor, men jeg synes det er halvdårligt design :-) Så altså hvad er din årsag til at du ønsker at undvige fra den normale fremgangsmåde?



t