0

I am working on a ASP.net custom server control, with jquery, WCF and stuff. I want to give the developer, using it, the flexibility of specifying an on success function (to be called when a task is successfully done by the control) in one of the publicly exposed properties of the control. I am new with events and delegates, can someone give me an idea how should I do it? Specifying the type of the public property? Setting the function name in the property(in the markup or/and in the code, as a string or any other type)? Calling the function/delegate from the control?

Some sample code would be preferred (please spare if I said something stupid)

Taha Rehman Siddiqui
  • 2,441
  • 5
  • 32
  • 58

1 Answers1

1

This is the standard pattern for events:

class YourControl {
    public event EventHandler Success;

    protected void OnSuccess() {
        if(this.Success != null)
            this.Success(this, EventArgs.Empty);
    }
}

Success is of type EventHandler to integrate nicely with other events, thus allowing generic event handlers (say a general-purpose logging facility) to subscribe. The event can be easily triggered everywhere in the control and its children by calling OnSuccess().

You can also customize the event adding further information:

class YourControl {
    public class YourControlEventArgs: EventArgs {
        public TimeSpan Elapsed;
        public YourControlEventArgs(TimeSpan t) {
            this.Elapsed = t;
        }
    }

    public event EventHandler<YourControlEventArgs> Success;

    protected void OnSuccess(TimeSpan t) {
        if(this.Success != null)
            this.Success(this, new YourControlEventArgs(t));
    }
}

A specific class holds the details of the event extending the simple EventArgs to integrate with the rest of the .NET, as said above.

BlackBear
  • 22,411
  • 10
  • 48
  • 86