c# - 如何取消订阅此 .NET 事件?

标签 c# asp.net .net events event-handling

我希望以编程方式取消订阅已连接的事件。

我想知道如何取消订阅 EndRequest 事件。

考虑到我使用的是内联代码,我不确定该怎么做。 (这是正确的技术术语吗?)

我知道我可以使用 some.Event -= MethodName 取消订阅..但我没有方法名称,在这里。

我使用内联代码的原因是因为我希望引用在事件外部定义的变量(我需要它......但感觉很臭......我觉得我需要将它传递进去)。

有什么建议吗?

代码时间..

public void Init(HttpApplication httpApplication)
{
    httpApplication.EndRequest += (sender, e) =>
    {
        if (some logic) 
            HandleCustomErrors(httpApplication, sender, e,
                              (HttpStatusCode)httpApplication.Response.StatusCode);
    };

    httpApplication.Error += (sender, e) => 
            HandleCustomErrors(httpApplication, sender, e);
}

private static void HandleCustomErrors(HttpApplication httpApplication, 
                                       object sender, EventArgs e, 
                                       HttpStatusCode httpStatusCode =
                                           HttpStatusCode.InternalServerError)
{ ... }

这只是我的一些示例代码,用于处理 ASP.NET 应用程序中的错误。

注意:请不要将此变成有关 ASP.NET 错误处理的讨论。我只是在玩弄事件,并将这些事件用于一些样本研发/学习。

最佳答案

无法取消订阅该匿名代表。您需要将它存储在一个变量中并稍后取消订阅:

EndRequestEventHandler handler = (sender, e) =>
{
    if (some logic) 
        HandleCustomErrors(httpApplication, sender, e,
                          (HttpStatusCode)httpApplication.Response.StatusCode);
};

httpApplication.EndRequest += handler;
// do stuff
httpApplication.EndRequest -= handler;

关于c# - 如何取消订阅此 .NET 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11093168/

相关文章:

c# - 将与类列表的列表项匹配的字典键加入新列表 - C#

javascript - 从 JavaScript 重定向

asp.net - ScrewTurn Wiki 事件目录支持

c# - WPF 追加文本会严重阻塞 UI 线程,但 WinForms 不会?

c# - C# 中的变量 - 函数执行后取消设置?

c# - 我怎样才能得到文件图标?

c# - Base 64 编码图像通过电子邮件发送 ASP.NET

c# - 这里的每个人都在跳上 ORM 潮流吗?

c++ - 在 .NET Core 3.1 中运行托管 C++/CLI 程序集时出现错误的图像格式

c# - 为什么在 C# 中添加多个 double 时顺序会影响舍入