2009-03-02 3 views
3

CancelEventArgs은 다른 이벤트 처리기가 해당 이벤트를 호출 한 개체에 작업을 계속 실행할지 여부를 알리도록 설정할 수있는 Cancel이라는 속성을 제공합니다.CancelEventArgs의 Cancel 속성을 덮어 쓰는 처리기

이벤트는 멀티 캐스트 대리인이므로 이벤트를 단순히 발생 시키면 두 명의 대리자가 호출 될 수 있습니다. 첫 번째는 Cancel 속성을 true로 설정하고, 두 번째는 Cancel 속성을 false로 설정합니다. 구성 요소/프레임 워크 '취소 가능'이벤트가 이러한 시나리오를 지원하고 각 단계에서 취소 플래그를 확인하여 각 위임을 하나씩 호출합니까? 이러한 유형의 사건을 제기하는 가장 좋은 방법은 무엇입니까? CancelEventArgs의 한 인스턴스 만 각 대리자에 전달됩니까? 별도의 인스턴스가 사용됩니까?

답변

2

약간의 실험을 통해 신속하게 EventArgs 개체의 취소 인스턴스 1 개를 사용함을 알 수 있습니다.

이벤트 핸들러가 부착 된 순서에 따라 결과가 약간 달라집니다.

CancelEventArgs의 특별한 경우에는 올바른 패턴이 취소를 true로 설정하거나 그대로 두는 것이 좋으므로 순서는 중요하지 않습니다.

1

는 테스트 :

public static void Main() { 
    Event += (sender, e) => e.Cancel = true; 
    Event += (sender, e) => e.Cancel = false; 
    Event += (sender, e) => e.Cancel = true; 

    var args = new CancelEventArgs(); 
    Event(null, args); 

    WL(args.Cancel); 
} 

static event EventHandler<CancelEventArgs> Event; 

연결된 이벤트 처리기의 순서는 사정을한다.

일반적으로 말하자면, 불변 이벤트 인수와 멀티 캐스트 대리자가 함께 사용해서는 안되지만 .NET 프레임 워크는 이러한 이벤트를 매우 광범위하게 사용합니다.

관련 문제