当事件在C#中订阅之前取消订阅时会发生什么?

时间:2019-08-28 10:56:07

标签: c# winforms events

在订阅事件之前取消订阅事件会发生什么。 在代码级别,它不会引发任何异常,但可以确切地说明它们处理这种情况的核心逻辑类型。

try
{
    // function (which may throw exception)
    doWork();

    // Subscribe event
    _test.MyEvent += MyEventHandler;

    // other code
}
catch (Exception)
{
     // do error handling
}
finally
{
     // Unsubscribe event
    test.MyEvent -= MyEventHandler;
}

如果doWork()函数引发异常,则最终将发生退订事件。对此,什么是解决这种情况的最佳解决方案。

在取消订阅之前,最好借助bool变量来处理这种情况。

可以取消订阅事件而不进行检查,因为它不会引发任何异常。

1 个答案:

答案 0 :(得分:0)

这取决于事件的实现方式。在C#中,我们可以使用自定义addremove逻辑声明一个事件。 add的实现者可以根据需要存储提供的委托。

理论上,他们也可以从throw内部remove出发,如果他们认为这将有助于标记对他们班级的滥用。但这在大多数情况下都是令人惊讶的行为,因为(如您所观察到的)-=在事件上通常可以容忍滥用。

定制访问器的全部目的是改变通常的行为,但是遵循最小的原则是一件好事。