2013-01-25 103 views
2

我不知道如何中断事件处理程序方法列表。
例如,我有以下代码。我应该在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 
    } 
... 
} 
+0

我会在这里使用的例外,即使你平时不应该使用异常来控制程序流程。也许会抛出一个['OperationCanceledException'异常](http://msdn.microsoft.com/en-us/library/system.operationcanceledexception.aspx)并在上面/集中处捕捉这个地方? –

回答

4

您可以定义委托,所以你custom event handler,蒙山其定制EventArgs,与布尔值。

例子:

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; 
    } 
... 
} 

这样,如果我们在处理之前任何其它事件handlder,检查是否Handled == true,它被设置成状态从其中一人一次,别人会跳过事件处理。

只是一个想法的例子,你必须改变它以适应你的代码确切的需求。

0

看看KeyDownEventArgs,有一个属性Handled可以设置为true。
你可以做同样的事情:

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 
    } 
} 
+0

当 - 太慢了:) – TGlatzer