Избежание многократных подписок, либо гарантированная отписка от всех C#
void MayBeInvokesOneOrMoreTimes()
{
SomeAction+=Subs;
}
void Subs()
{
}
void Clear()
{
SomeAction-=Subs;
}
При таком коде, в случае вызова метода MayBeInvokesOneOrMoreTimes несколько раз, происходит многократная подписка, и метод Clear в таком случае снимет всего одну подписку, а остальные будут работать.
Вопрос - как выйти из этой ситуации? Я вижу три варианта
1)Не использовать метод, который вызывается более одного раза, для подписки.
2)Использовать bool для проверки - подписывался ли я уже, и если да, то второй раз этого не делать.
3)Использовать какие то встроенные методы C#, которые расчитаны на это, возможно где то есть возможность "удалять все подписки, вызывающие этот метод у этого эвента"
Вопрос - есть ли что-то такое в шарпе из 3-го варианта, и как вообще принято решать подобные задачи.
Ответы (1 шт):
Можно предварительно отписать обработчик, перед тем как подпиcаться. Ничего страшного, если обработчик перед этим не был подписан. Но вы тем самым гарантируете однократное подписывание (конечно же именно в этом методе)
void MayBeInvokesOneOrMoreTimes()
{
SomeAction-=Subs;
SomeAction+=Subs;
}