简体   繁体   English

如何中断事件处理程序

[英]How to break event handler

I don't know how can I break event handler method list. 我不知道如何中断事件处理程序方法列表。
For example I have follow code. 例如,我有以下代码。 What should i write in IF statement? 我应该在IF语句中写些什么?

public event EventHandler myEvent;
...
myEvent += new EventHandler(met1);
myEvent += new EventHandler(met2);
myEvent += new EventHandler(met3);
...
public void met2(object sender, EventArgs e)
{
...
     if(myCondition)
     {
     //there I want to break execution of all methods assiciated with myEvent event
     //I want to break met2 and don't allow to execute met3
     }
...
}

You can define your delegate , so your custom event handler , whith its custom EventArgs , with boolean value. 您可以定义您的委托 ,因此您的custom event handler及其自定义EventArgs具有布尔值。

Example: 例:

public class MyEventArg : EventArgs {

    public bool Handle {get;set;}

}

myEvent += new MyEventHandler(met1);

public void met2(object sender, MyEventArgs e)
{

   if(e.Handled)
      return;

   if(myCondition)
   {
       e.Handled = true;
       return;
   }
...
}

In this way, if we in any other event handlder before processing it, check if Handled == true , one time it's set into that state from one of them, others would skip that event processing. 这样,如果我们在处理任何其他事件处理程序之前,先检查Handled == true ,则一旦其中之一被设置为该状态,其他人就会跳过该事件处理。

Just an idea example, you have to change it to fit your code exact needs. 仅是一个示例示例,您必须对其进行更改以适合您的代码的确切需求。

Look into KeyDownEventArgs, there is an Property Handled wich can be set to true. 看看KeyDownEventArgs,有一个物业Handled至极可以被设置为true。
You could do something similar: 您可以执行类似的操作:

class myClass {
    public event EventHandler myEvent;

    myEvent += new EventHandler(met1);
    myEvent += new EventHandler(met2);
    myEvent += new EventHandler(met3);

    public void metN(object sender, MyCustomEventArgs e)
    {
        if(e.Cancel)
            return;

        // Do whatever you like

        if(<someBooleanStatement>)
        {
            e.Cancel = true;
            return;
        }

        // Do whatever you like
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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