这种模式叫什么? 软锁?

以下是我必须编写的一些代码,主要是与UI内容结合使用,并且总是会出现可能意外结束无限循环的事件。

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’用于防止冗余或可能的无限事件调用。 虽然我并不总是这样做(因为有明显的危险),但有时它是一个有用的解决方案,但我不知道该怎么称呼它。 由于缺乏更好的术语,我一直在使用“软锁”。 什么是真名?

编辑:
是的,我知道它不是线程安全的等等。这是一个名称问题,而不是设计问题。 但是因为值得讨论……
代码改进:更好地替代这种模式?

已经有很多关于设计的说法(不是线程安全等)。

你似乎要求一个名字……不知道这是否广为流传,但我多次听说它作为一个悔改的哨兵。

我认为这与信号量有些相关,即:使用布尔变量查看某些内容。

编辑:正如问题的评论所指出的那样,应该避免这种“模式”,因为它不是线程安全的,exception安全的和良好的。