我有一个静态类,我想在该类的静态方法中作为try-catch块的一部分引发一个事件.

例如,在这个方法中,我想在catch中引发一个自定义事件.

public static void saveMyMessage(String message)
{
    try
    {
        //Do Database stuff
    }
    catch (Exception e)
        {
              //Raise custom event here
        }
}

非常感谢.

推荐答案

重要提示:从实例订阅静电活动一定要慎重.静电到静电是可以的,但是从静电事件订阅到实例处理程序是保持该实例永远存活的一种很好的(阅读:非常危险)方式.GC将看到该链接,并且除非您取消订阅(或使用类似WeakReference的东西),否则不会收集实例.

创建静态事件的模式与实例事件相同,只有static个:

public static event EventHandler SomeEvent;

为了简化工作(重新判断null),这里有一个有用的技巧,那就是添加一个琐碎的处理程序:

public static event EventHandler SomeEvent = delegate {};

然后,您可以直接调用它,而无需进行null判断:

SomeEvent(null, EventArgs.Empty);

请注意,因为委托实例是不可变的,并且解除引用是线程安全的,所以这里永远不会有争用条件,也不需要锁定.当我们取消引用被调用时,任何人都是订阅的.

(根据自己的活动参数等进行调整).

Asp.net相关问答推荐

无法在Microsoft Windows Server 2016(数据中心)上运行.NET可移植性分析器

更新剃须刀页面中图表的值

禁用托管优化并重新启动调试实际上在 Visual Studio 中更改了哪些设置?

.NET 框架 3.5 和 TLS 1.2

VS2013发布Web部署任务失败文件正在使用中

无法读取配置部分system.servicemodel,因为它缺少部分声明

如何使用文件上传控件 Select 多个文件?

在 C# 中将 IHtmlContent/TagBuilder 转换为字符串

IIS 中的 existingResponse="PassThrough" 是什么意思?

反序列化客户端 AJAX JSON 日期

在 asp.net 中为动态 PDF 指定文件名

为应用程序池Classic .NET AppPool提供服务的进程与 Windows 进程激活服务发生了致命的通信错误

解析器错误:无法创建类型

Owin.IAppBuilder不包含MapSignalR的定义

回发不适用于 aspx 页面作为默认文档

MSBuild DeployOnBuild=true 不发布

使用 .NET 连接到 AS400

LinkBut​​ton 向 OnClick 后面的代码发送值

如何从 ASP.NET Identity 获取用户列表?

判断 IQueryable 结果集的最佳方法是什么?