【问题标题】:.NET Framework, WPF: Cancel Function Raising Event.NET Framework、WPF:取消函数引发事件
【发布时间】:2021-03-17 15:11:31
【问题描述】:

我有一个引发事件的函数

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 中捕获异常,但它会中断我的应用程序并且我希望保持应用程序运行。

【问题讨论】:

    标签: c# .net wpf event-handling


    【解决方案1】:

    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<EdgeDeletedEventArgs> Delete;) 并从 CancelEventArgs 继承 EdgeDeletedEventArgs

    【讨论】:

    • 谢谢!正是我需要的!
    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多