Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何中断事件处理程序_C#_.net_Events - Fatal编程技术网

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、 取消=真;
返回;
}
//你想干什么就干什么
}
}

我会在这里使用异常,即使您通常不应该使用异常来控制程序流。也许在上面/中央的某个地方抛出一个并捕获这个?我会在这里使用异常,即使您通常不应该使用异常来控制程序流。也许在上面/中央的某个地方扔一个球然后抓住这个球?