Вот немного кода, который мне иногда приходится писать, в основном в сочетании с пользовательским интерфейсом и всегда с событиями, которые могут случайно запутаться в бесконечных циклах.
public class MyClass
{
public event EventHandler MyEvent;
private bool IsHandlingEvent = false;
public MyClass()
{
MyEvent += new EventHandler(MyClass_MyEvent);
}
void MyClass_MyEvent(object sender, EventArgs e)
{
if (IsHandlingEvent) { return; }
IsHandlingEvent = true;
{
// Code goes here that handles the event, possibly invoking 'MyEvent' again.
// IsHandlingEvent flag is used to avoid redundant processing. What is this
// technique, or pattern called.
// ...
}
IsHandlingEvent = false;
}
}
Как видите, использование флага IsHandlingEvent используется для предотвращения избыточных или возможных бесконечных вызовов событий. Хотя я не всегда делаю подобные вещи (из-за очевидных опасностей), иногда это полезное решение, но я не знаю, как это назвать. Из-за отсутствия лучшего термина, я использовал «мягкую блокировку». Какое настоящее имя?
EDIT:
Да, я знаю, что это не потокобезопасно и т. Д. Это вопрос имени, а не вопрос дизайна. Но так как это стоит обсудить ...
Улучшение кода: лучшие альтернативы этому шаблону?