当前位置: 首页 > 知识库问答 >
问题:

.NET Framework,WPF:取消函数引发事件

钱睿范
2023-03-14

我有一个函数来处理一个事件

public void Delete(bool raiseEvent)
{
       if (raiseEvent)
       {
           RaiseEvent(new EdgeDeletedRoutedEventArgs(DeletedEvent, this));
       }
       ....some other stuff
}

我订阅该功能如下:

Class.Delete += SomethingDeleted;

void SomethingDeleted(object sender, EdgeDeletedRoutedEventArgs e)
{
    if (someCondition)
    {
        // here i want to cancel the delete function which raises the event
    }  
}

怎么可能取消删除功能,这样“其他东西”就不会在不中断我的应用程序的情况下执行呢?

我尝试在SomethingDeleted中抛出一个异常,并在Delete中捕获该异常,但它中断了我的应用程序和id,以保持应用程序运行。

共有1个答案

吴宏扬
2023-03-14

bool cancel属性添加到EdgeDeletedRoutedEventArgs(与CancelEventArgs一样)

public void Delete(bool raiseEvent)
{
       if (raiseEvent)
       {
           var args = new EdgeDeletedRoutedEventArgs(DeletedEvent, this);
           RaiseEvent(args);
           if (args.Cancel) return;
       }
       ....some other stuff
}

void SomethingDeleted(object sender, EdgeDeletedRoutedEventArgs e)
{
    if (someCondition)
    {
         e.Cancel = true;
         return;
    }  
}

如果您不真正需要RoutedEvent功能,请使用常规事件(event EventHandler Delete; )并从CancelEventArgs继承EdgeDeletedEventArgs

 类似资料:
  • 我有一个Spring靴2.0.0。M7 Spring Webflux应用程序,其中我使用的是Thymeleaf Reactive。 我注意到,在我的微服务上,当我在SSE模式(文本/事件流)下调用一个返回数据流的endpoint时,即使该数据流已被正确处理,也会在该数据流上发生cancel()。 例如,这里有一个简单的控制器endpoint: 以下是我在SSE模式下请求时得到的订阅流量日志: 我们

  • 我有一个视觉树,看起来像这样: 一个,包含一个,其中包含一个。 滚动查看器(ScrollViewer)占据了滚动查看器(ScrollViewer)边框(Border)的100%空间,而文本块(TextBlock)可能会也可能不会占据滚动查看器(ScrollViewer)的100%空间,具体取决于用户的配置方式。 我想为用户单击边框中的任何位置捕获鼠标向下事件。当我为边框或滚动查看器注册鼠标向下事件

  • 使用on()方法绑定事件后,若希望取消绑定,则可以使用off()方法。off()方法根据传入参数的不同,有不同的实现逻辑。 version added: 2.0.0 .off( event , selector , handler ) event Type: String 需取消绑定的事件名称,例如:'tap' selector Type: String 选择器 handler Type: Fun

  • 我实现了AWS Eventbridge规则和Lambda函数的基本组合作为其目标。假设该规则基于所有AWS自动缩放事件创建一个事件,并调用Lambda。当触发现有ASG的缩放操作时,此操作效果良好,但当创建具有相同前缀的新ASG时,规则不会做出反应。旧ASG名称:test-ASG-lc-123新ASG名称:test-ASG-lc-124 甚至可以使用通配符吗?

  • 我已经实现了一个EventGrid触发器来响应Blob存储事件,其逻辑简化如下: 外部API的响应时间不长(1秒或更短),我对主机的配置设置为默认(因此允许无限数量的并发调用)。 当同时添加多个blob(从只有2个blob开始)时,我在日志中得到了很多重复的事件(脚本正在快速地一个接一个地上传blob,中间没有等待时间)。 我觉得这可能是由于我从不承认收到事件,我不知道我是否应该在我的代码中执行此

  • 我使用的是Java14,但我记得它在过去的版本中是有效的。