C# 如何中断事件处理程序
我不知道如何打破事件处理程序方法列表。C# 如何中断事件处理程序,c#,.net,events,C#,.net,Events,我不知道如何打破事件处理程序方法列表。例如,我有以下代码。我应该在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(m
例如,我有以下代码。我应该在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
}
...
}
您可以使用布尔值定义您的委托,这样您的自定义事件处理程序
,以及它的自定义事件参数
例如:
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;
}
...
}
这样,如果我们在处理任何其他事件句柄之前,先检查Handled==true
,一旦从其中一个事件句柄设置为该状态,其他事件句柄就会跳过该事件处理
举个简单的例子,您必须更改它以满足您的代码确切的需要。您可以定义您的委托,这样您的自定义事件处理程序
(其自定义事件参数
)就具有布尔值
例如:
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;
}
...
}
这样,如果我们在处理任何其他事件句柄之前,先检查Handled==true
,一旦从其中一个事件句柄设置为该状态,其他事件句柄就会跳过该事件处理
只是一个想法示例,您必须更改它以满足您的代码确切需要。查看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
}
}
class-myClass{
公共事件事件处理程序;
myEvent+=新事件处理程序(met1);
myEvent+=新事件处理程序(met2);
myEvent+=新事件处理程序(met3);
public void metN(对象发送方,MyCustomEventArgs e)
{
如果(如取消)
返回;
//你想干什么就干什么
if()
{
e、 取消=真;
返回;
}
//你想干什么就干什么
}
}
查看KeyDownEventArgs,有一个属性已处理
可以设置为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
}
}
class-myClass{
公共事件事件处理程序;
myEvent+=新事件处理程序(met1);
myEvent+=新事件处理程序(met2);
myEvent+=新事件处理程序(met3);
public void metN(对象发送方,MyCustomEventArgs e)
{
如果(如取消)
返回;
//你想干什么就干什么
if()
{
e、 取消=真;
返回;
}
//你想干什么就干什么
}
}
我会在这里使用异常,即使您通常不应该使用异常来控制程序流。也许在上面/中央的某个地方抛出一个并捕获这个?我会在这里使用异常,即使您通常不应该使用异常来控制程序流。也许在上面/中央的某个地方扔一个球然后抓住这个球?