이벤트 핸들러를 다른 변수에 복사하는 이유

그레이엄

예에서 다음 코드를 찾습니다.

public event EventHandler ThresholdReached;

protected virtual void OnThresholdReached(EventArgs e)
{
  EventHandler handler = ThresholdReached;
  if (handler != null)
            handler(this, e);
}

라인의 이유를 이해하고 싶습니다.

EventHandler handler = ThresholdReached;

이런 식으로 할 수는 없습니다.

public event EventHandler ThresholdReached;

protected virtual void OnThresholdReached(EventArgs e)
{
  if (ThresholdReached != null)
            ThresholdReached(this, e);
}

어느 쪽이든 장단점이 있습니까?

르네 보그

문제는이 선 사이에

if (ThresholdReached != null)

그리고이 줄

ThresholdReached(this, e);

다른 스레드가 ThresholdReached이벤트 에서 핸들러를 제거했을 수 있습니다 . 그래서 그것은 될 것이고 null예외가 던져 질 것입니다.

값을 지역 변수에 저장하면 스레드로부터 안전하게 호출 할 수 있습니다.

C # 6부터 다음과 같이 코드를 줄일 수 있습니다.

ThresholdReached?.Invoke(this, e);

이제 컴파일러는 값을 임시 변수에 저장합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

다른 핸들러에서 angularjs 이벤트 핸들러를 어떻게 트리거 할 수 있습니까?

분류에서Dev

Javafx : 다른 개별 클래스에 이벤트 핸들러를 추가하는 방법

분류에서Dev

동적으로 추가 된 이벤트 핸들러는 자바 스크립트에서 이전 이벤트 핸들러를 비활성화합니다.

분류에서Dev

React가 이벤트 핸들러에서 "this"를 찾을 수없는 이유

분류에서Dev

이벤트 핸들러 내에서 변수를 상수로 사용

분류에서Dev

Java는 여러 버튼에서 이벤트 핸들러를 동적으로 깔끔하게 사용합니다.

분류에서Dev

매개 변수가있는 함수를 이벤트 핸들러에 전달

분류에서Dev

JavaScript에서 다양한 이벤트에 대한 단일 이벤트 핸들러를 만드는 방법

분류에서Dev

예외를 던진 객체가 이벤트 핸들러에서 생성 된 경우 전역 이벤트 핸들러에는 세부 정보가 없습니다.

분류에서Dev

Caliburn.Micro는 Behavior 이벤트에 이벤트 핸들러를 첨부합니다.

분류에서Dev

이 예제에서 이벤트 핸들러에 대한 또 다른 참조를 만드는 이유는 무엇입니까?

분류에서Dev

Powershell : 이벤트 핸들러가 for 루프 내부에있을 때 체크 박스 변경 이벤트가 유효한 결과를 제공하지 않습니다.

분류에서Dev

GWT 이벤트 핸들러를 추가 할 수 없습니다.

분류에서Dev

이벤트 핸들러를 연결할 수 없습니다.

분류에서Dev

VBA의 다른 버튼 클릭 이벤트 내에서 버튼 클릭 이벤트 핸들러 사용

분류에서Dev

원하는 이벤트에 적합한 핸들러를 찾을 수 없습니다.

분류에서Dev

이벤트 핸들러를 기다리는 AsyncEx DeferralManager

분류에서Dev

HTML onSubmit / onClick 핸들러 함수는 이벤트를 제외한 다른 매개 변수를 가질 수 있습니까?

분류에서Dev

JS-이벤트 핸들러를 사용하여 함수에 인수 전달

분류에서Dev

다른 페이지에있는 모든 컨트롤의 이벤트 핸들러를 작성할 수 있습니까?

분류에서Dev

클래스의 이벤트 핸들러가 해당 클래스의 변수를 상속하지 않는 이유

분류에서Dev

@action 데코레이터를 반응 이벤트 핸들러 함수에 추가 할 때 구성 요소가 다시 렌더링되지 않는 이유

분류에서Dev

캡처 단계에서 요소의 이벤트 핸들러를 실행하는 다양한 방법

분류에서Dev

이벤트 핸들러 내에서 전달 된 변수를 변경하는 방법

분류에서Dev

JQuery에서 양식 제출-이벤트 핸들러를 사용할 때 양식에 조치 매개 변수를 제공하는 이유

분류에서Dev

Vue.js는 바운드 데이터를 클릭 이벤트 핸들러에 전달합니다.

분류에서Dev

EventArgs는 이벤트 핸들러에 매개 변수를 전달하려고 할 때 항상 동일한 값을 갖습니다.

분류에서Dev

이벤트 및 컨텍스트를 전달하는 Pytest 람다 핸들러

분류에서Dev

이벤트 핸들러는 이벤트 소스에 작용

Related 관련 기사

  1. 1

    다른 핸들러에서 angularjs 이벤트 핸들러를 어떻게 트리거 할 수 있습니까?

  2. 2

    Javafx : 다른 개별 클래스에 이벤트 핸들러를 추가하는 방법

  3. 3

    동적으로 추가 된 이벤트 핸들러는 자바 스크립트에서 이전 이벤트 핸들러를 비활성화합니다.

  4. 4

    React가 이벤트 핸들러에서 "this"를 찾을 수없는 이유

  5. 5

    이벤트 핸들러 내에서 변수를 상수로 사용

  6. 6

    Java는 여러 버튼에서 이벤트 핸들러를 동적으로 깔끔하게 사용합니다.

  7. 7

    매개 변수가있는 함수를 이벤트 핸들러에 전달

  8. 8

    JavaScript에서 다양한 이벤트에 대한 단일 이벤트 핸들러를 만드는 방법

  9. 9

    예외를 던진 객체가 이벤트 핸들러에서 생성 된 경우 전역 이벤트 핸들러에는 세부 정보가 없습니다.

  10. 10

    Caliburn.Micro는 Behavior 이벤트에 이벤트 핸들러를 첨부합니다.

  11. 11

    이 예제에서 이벤트 핸들러에 대한 또 다른 참조를 만드는 이유는 무엇입니까?

  12. 12

    Powershell : 이벤트 핸들러가 for 루프 내부에있을 때 체크 박스 변경 이벤트가 유효한 결과를 제공하지 않습니다.

  13. 13

    GWT 이벤트 핸들러를 추가 할 수 없습니다.

  14. 14

    이벤트 핸들러를 연결할 수 없습니다.

  15. 15

    VBA의 다른 버튼 클릭 이벤트 내에서 버튼 클릭 이벤트 핸들러 사용

  16. 16

    원하는 이벤트에 적합한 핸들러를 찾을 수 없습니다.

  17. 17

    이벤트 핸들러를 기다리는 AsyncEx DeferralManager

  18. 18

    HTML onSubmit / onClick 핸들러 함수는 이벤트를 제외한 다른 매개 변수를 가질 수 있습니까?

  19. 19

    JS-이벤트 핸들러를 사용하여 함수에 인수 전달

  20. 20

    다른 페이지에있는 모든 컨트롤의 이벤트 핸들러를 작성할 수 있습니까?

  21. 21

    클래스의 이벤트 핸들러가 해당 클래스의 변수를 상속하지 않는 이유

  22. 22

    @action 데코레이터를 반응 이벤트 핸들러 함수에 추가 할 때 구성 요소가 다시 렌더링되지 않는 이유

  23. 23

    캡처 단계에서 요소의 이벤트 핸들러를 실행하는 다양한 방법

  24. 24

    이벤트 핸들러 내에서 전달 된 변수를 변경하는 방법

  25. 25

    JQuery에서 양식 제출-이벤트 핸들러를 사용할 때 양식에 조치 매개 변수를 제공하는 이유

  26. 26

    Vue.js는 바운드 데이터를 클릭 이벤트 핸들러에 전달합니다.

  27. 27

    EventArgs는 이벤트 핸들러에 매개 변수를 전달하려고 할 때 항상 동일한 값을 갖습니다.

  28. 28

    이벤트 및 컨텍스트를 전달하는 Pytest 람다 핸들러

  29. 29

    이벤트 핸들러는 이벤트 소스에 작용

뜨겁다태그

보관