c# - .NET Framework、WPF:取消函数引发事件
问题描述
我有一个引发事件的函数
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 中捕获异常,但它会中断我的应用程序并且我希望保持应用程序运行。
解决方案
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
推荐阅读
- python - 如何使用 Python 将每日数据转换为每周、每月和每季度
- python - IndexError:在Python中追加到列表时列表索引超出范围
- sqlalchemy - 为特定行更新 SQL 中的记录
- python - AttributeError:“QuantumCircuit”对象没有属性“config”
- keycloak - 管理 keycloak 资源
- angular - 使用 ngFor 和角顶点图的多个图表
- date - Power BI:在 DAX 中按 YearMonth 排序数据
- java - 在秋千图标的顶部绘画?
- python - 将一些列转换为浮点数
- javascript - 在烧瓶本地主机服务器中使用 javascript 位置对象时遇到问题