Link to home
Start Free TrialLog in
Avatar of Gene Moody
Gene MoodyFlag for United States of America

asked on

Create/Trigger Event in a custom C#.Net DLL (Not a Control or Form)

Hi Experts!  o/

I have written a DLL that interfaces an external machine, and has reason to return Event information sometimes.  It has been posited that we add an Event to the DLL in order to get the Utility/Controller Application's "attention" when one of these Events occur - be it to display a warning, take automatic corrective action, or whatever.  I thought it sounded like a good idea, and since I've used Events successfully in other Forms and Custom Controls - I figured it would be a no-brainer.

I was wrong.  I can be big about it.  But now I've got to figure out how to get Events working with this DLL.

For what it's worth, I've got the Event Handler declared at the top of the system, in with the variable declaration and definitions:
public event EventHandler MonitorStateChanged;                          // When an external force changes the [Monitor] interface value - tell everybody!  (Or anybody who's listening...)

Open in new window

...and later on, down in the code where that particular interface value may change, I have the following code:
                if (MonitorStateChanged != null)
                    MonitorStateChanged(this, EventArgs.Empty);

Open in new window

...I'll figure out how to properly fill/utilize the [EventArgs] class later - we can send it an (Empty) for now.

And here's the problem: it doesn't work - it's not exposed in the client application as something with which I can connect.  Seriously, I type the following:
sysComms.MonitorStateChanged += new EventHandler(monitorStatusChanged);

Open in new window

...and I get the following errors:
Error 1     Invalid token '+=' in class, struct, or interface member declaration
Error 2     Method must have a return type
Error 3     Identifier expected
Error 4     The type or namespace name 'MonitorStateChanged' does not exist in the namespace 'sysComms' (are you missing an assembly reference?)
Error 5     'sysTestSystem.mainForm.monitorStatusChanged(object, System.EventArgs)' is a 'method' but is used like a 'type' it seems that - over in the sysComms64 DLL (from which [sysComms] is derived) it matters not that the event is defined [Public] and triggered internally.

I went back and checked a couple of my Controls, but they seem to work fine, no problem, and this is the exact same method I used there.  Since this is a DLL (as opposed to a Control or Form), is there something else I need to include in "using..." or something?  What have I missed?

Thanks for your time (and patience!)

- The Lurking LongFist
Avatar of topdog770
Flag of United States of America image

Link to home
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Gene Moody


Okay - I didn't see that one coming.  But you are absolutely correct!  It turns out that version 1.0 still exists on the drive, and in a subfolder not often visited.  (Shamefacedly, I should have archived that, too, when I did my cleaning sweep.  But I didn't, and here we are.

I opened up another application under development - one that only ever used that interface - and the event was there, loud and proud.  It even worked...

Kudos (and points) to you - I never would've thought it.  Now I've got something else for which to sweep the DevSystems folders...

- Thanks again!
Dead-on accurate, simple to read and understand, and indicative of a massive oversight on my part.  [Red face here.]  I guess you can't afford to get too comfortable, or it will invite complacency, which will soon be followed by mishap (or disaster)...
it happens to all of us.. we think complex and abstract and sometimes it's just the semi-colon that gets in the way