简体   繁体   中英

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?

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM