Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How events like CancelEventArgs can be used?

How can the event System.ComponentModel.CancelEventArgs be used? Suppose we have the following code:

    public event CancelEventHandler EventTest = delegate { };

    public void MakeSomethingThatRaisesEvent()
    {
        CancelEventArgs cea = new CancelEventArgs();
        EventTest(this, cea);
        if (cea.Cancel)
        {
            // Do something
        }
        else
        {
            // Do something else
        }
    }

What happens if more than one delegate is registered on the event? There is any way to get the results of all the subscribers?

This is used on Winforms (at least) sometimes. If not possible to get all values, they suppose only one subscriber to the event?

like image 326
FerranB Avatar asked Oct 08 '09 17:10

FerranB


2 Answers

To ask each subscriber separately, you need to access the list:

foreach (CancelEventHandler subHandler in handler.GetInvocationList())
{
     // treat individually
}

Then you can check each in turn; otherwise you just get the final vote.

like image 51
Marc Gravell Avatar answered Oct 08 '22 04:10

Marc Gravell


Normally, in most cases, the class just allows multiple subscribers, but each gets the same instance of CancelEventArgs.

If any of the subscribers set Cancel to true, the operation will be treated as canceled.

You can work around this by getting the invocation list, and sending an event to each subscriber, but this is not usually necessary.

like image 42
Reed Copsey Avatar answered Oct 08 '22 06:10

Reed Copsey