2009-03-17 4 views
2

임시로 첨부 할 정적 메서드가 있습니다. 메모리에 저장하지 않으려 고하거나, 두 개의 이벤트 처리기를 실행하는 상황에 놓이게 할 수 있습니다. 그것을 두 번 부르십시오.인라인 정적 이벤트 제거

나는 이것들이 정적인지 아닌지에 관해서는 거의 이야기하지 않았으며 토론/리펙터 책임을 갖지 않을 것을 선호한다.

처음에 나는이 잘 작동하고있다이

public static void DoSomething() 
{ 
    try 
    { 
     MyStaticClass.MyEvent +=new EventHandler<HandledEventArgs>(MyStaticClass_HandleMe); 
     ... //Doing Stuff 
    } 
    finally 
    { 
     MyStaticClass.MyEvent -=new EventHandler<HandledEventArgs>(MyStaticClass_HandleMe);//Detach from event 
    } 
} 

처럼 그 일을했다,하지만 난 방법의 다른 이벤트와 일치하는 이벤트를 인라인으로 처리하고자뿐만 아니라 취소의 설정 것 boolean은 함수에 대해 지역적이며 다른 이벤트에 의해 사용됩니다.

public static void DoSomething() 
{ 
    try 
    { 
     bool cancel = false; 
     MyStaticClass.MyEvent +=new EventHandler<HandledEventArgs>(delegate(object sender, HandledEventArgs e) 
     { 
      cancel = true; 
     }) 
     ... //Doing Stuff dependent on cancel = false; 
    } 
    finally 
    { 
     //??? 
    } 
} 

시나리오 2에서 정적 이벤트를 어떻게 정리하고 분리 할 수 ​​있습니까?

답변

4

당신은 같은 것을 시도 할 수 :

public static void DoSomething() 
{ 
    bool cancel = false; 
    EventHandler<EventArgs> handler = delegate { cancel = true; }; 

    try 
    { 
     MyStaticClass.MyEvent += handler; 
    } 
    finally 
    { 
     MyStaticClass.MyEvent -= handler; 
    } 
} 
+0

건배, 지금 내가 그것을보고 너무 명백한 것을 :) – johnc