[C#] Event handler

Pagina: 1
Acties:

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 16:33
Ik gebruik in een C#-prorgramma een COM-object (de Windows Media Encoder).
Ik ben nu al zo ver dat ik er vanalles mee kan en het werkt ook allemaal perfect.
Maar hoe kan ik nu de events van dit COM-object afvangen ?
Ik heb de interfaces:
_IWMEncoderEvents
_IWMEncoderEvents_Event

En de delegate:
_IWMEncoderEvents_OnStateChangeEventHandler

Maar hoe kan ik ze nu aanspreken vanuit m'n code ?
En welke moet ik gebruiken ?

Ik heb al wel in de MSDN gekeken, maar daar kan ik niet echt een touw aan vastknopen.
Dat gaat ook vaak over zelf componenten schrijven en zo.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Waar kom je precies niet uit? Weet je niet hoe je een handler aanmaakt met een methode en deze moet aanmelden bij een event?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • maikel
  • Registratie: Januari 2001
  • Laatst online: 16:33
Juist !
Het event zelf wordt al aangesproken vanuit het COM-object, maar hoe kan ervoor zorgen dat mijn programma er op reageert ?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Volgens mij moest het zo:

Je hebt in een object een event:
code:
1
event NewMailEventHandler NewMail

en ergens een delegate:
code:
1
delegate void NewMailEventHandler(IMailbox sender, MessageEventArgs e);

ergens anders implementeer je een methode die voldoet aan de signature. Bijvoorbeeld:
code:
1
2
3
4
public void NewMailForwarder(IMailbox sender, MailEventArgs args)
{
   ....
}

je meldt hem aan via:
code:
1
NewMail += new NewMailEventHandler(NewMailForwarder);

Moet lukken zo ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • maikel
  • Registratie: Januari 2001
  • Laatst online: 16:33
Ik heb nu dit:
code:
1
2
3
4
5
6
7
8
9
10
11
public void OnStateChange(WMENC_ENCODER_STATE enumState)
{
    Console.WriteLine("State changed");
}

public Form1()
{
    InitializeComponent();
    we = new WMEncoder();
    we += _IWMEncoderEvents_OnStateChangeEventHandler(OnStateChange);
...

Maar dit werkt dus niet.
Ik krijg nu de foutmelding dat ik de functie OnStateChange aanroep 'without parentheses'.

Het werkt al !
Ik moest ipv "we += _IWMEncoderEvents_OnStateChangeEventHandler(OnStateChange);"
gewoon "we.OnStateChange += new _IWMEncoderEvents_OnStateChangeEventHandler(StateChange);" doen.

Thnx !!