이벤트 처리에 대한 개념적 질문이 있습니다.여러 EventHandler/대리자 블록 - 처리를 중지하는 방법?
하나의 이벤트에 여러 개의 익명 대리자 블록이 할당되도록하십시오. 기본적으로 onedelegate는 검사를 수행하고 검사가 실패하면 결국 블록 처리를 중단해야합니다.
모든 항목을 단일 대리자 블록에 넣고 필요할 때마다 리턴하는 것이 가능하다는 것을 알고 있습니다.
그러나 여러 개체에서 확인이 필요한 경우 해당 코드가 모든 개체에 있어야합니다.
object1.SomeEvent += delegate {
// check something
if (somethingHappened) {
// STOP!
return;
}
// do something for object1 (if nothing happened)
}
object2.SomeEvent += delegate {
// check something
if (somethingHappened) {
// STOP!
return;
}
// do something else for object2 (if nothing happened)
}
이렇게 할 수 있습니까? 그렇다면 어떻게해야합니까?
EventHandler checkSomething = delegate {
if (somethingHappened) {
// STOP!
// What to do here?
return; // This won't prevent the other event handlers from executing. :(
}
};
object1.SomeEvent += checkSomething;
object1.SomeEvent += delegate {
// do something for object1 (if nothing happened)
};
object2.SomeEvent += checkSomething;
object2.SomeEvent += delegate {
// do something else for object2 (if nothing happened)
}
EDIT :
실제 시나리오 :
개체 유형있는 UIButton (MonoTouch/UIKit)로하고, 사용자가 그 프레임 내에서 그들 (도청 정지 할 때마다 이벤트 TouchUpInside 나타날).
두 단추가 일반적으로하는 일을하지 못하도록하고 오류 상태에 대해 경고하는 UIAlertView를 표시하는 오류 조건이 있습니다.
실제로 이벤트가 작동하는 방식이 아닙니다. 한 구독자는 다른 구독자에게 이벤트 전파를 중지 할 수 없습니다. 그게 니가하려고하는 것 같아, 맞지? 개체에 대한 정보를 조금 더 제공하면 이벤트가 발생하고 각 구독자가 어떤 작업을 수행할지, 어떤 조건으로 전파를 막을지를 사람들은 작동 할 수있는 솔루션을 제공 할 수 있습니다 –
CancelEventArgs 및 해당 사용법을 확인하십시오. WinForms 시스템 전반에 걸쳐. –