다음은 주로 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'플래그를 사용하면 중복되거나 가능한 끝없는 이벤트 호출을 방지 할 수 있습니다. 나는 항상 이와 같은 일을하는 것은 아니지만 (명백한 위험 때문에) 때로는 유용한 해결책이지만, 무엇을 부를지 모릅니다. 더 나은 용어가 부족하여 "소프트 잠금 장치"를 사용하고 있습니다. 진짜 이름이 뭐니?
편집 :
예, 나는이 이름 질문이 아닌 디자인 질문 등이 스레드 안전되지 않았 음을 알 수 있습니다. 이
Code improvement: Better alternatives to this pattern?
이 코드는 스레드 세이프가 아닙니다. 하나의 스레드가'IsEventHandling'을 테스트 한 직후 컨텍스트 스위치가있을 수 있습니다. 그러나 UI와 관련된 경우 이벤트를 발생시키는 UI 스레드이므로 괜찮을 것입니다. – dlev
안전하지 않습니다. 그래서이 패턴을 "DontUse"라고해야한다고 생각합니다 :-) –
'MyEvent'를 다시 호출하는 이벤트에 대한 부분을 "프로그래머가 조이면"이라고 확신합니다 ... – NotMe